Mirror - Swift objects Reflection API. It's 100% Swift, no Objc runtime.
It's possible to do reflection of Swift object. And it doesn’t need to be hard.
##Features
- 100% Pure Swift implementation
- Easy to use
- Powerful
- Even more Powerful (Coming soon)
If you want to try it, there is a demo Playground available, just run
pod try Mirror
###Create a mirror for an instance
struct Person {
let name: String
var age: Int
}
var person = Person(name: "Jon", age: 27)
let mirror = Mirror(person)
//Get information about the type of an instance
mirror.name
//"MirrorTest.Person"
mirror.shortName
//Person
mirror.memorySize
// 32
mirror.isClass
//false
mirror.isStruct
//true
Get information about content of the type, its properties
mirror.names
//["name", "age"]
mirror.values
//["Jon", 27]
mirror.types
//[Swift.String, Swift.Int]
mirror.typesShortName
//["String", "Int"]
mirror["name"] //"Jon"
mirror["age"] //27
mirror.toDictionary
//["age": 27, "name": "Jon"]
All the CollectionType methods are available for use with mirror
Iterating, count, map, filter and other
// Iterate over its children MirrorItems
for item in mirror {
println(item)
}
//name: Swift.String = Jon
//age: Swift.Int = 27
let children = mirror.children //Array of MirrorItem
let firstKid = children[0]
//{name: "name", type: Swift.String, value: "Jon" }
var mirP = mirror[1]
mirP.name // "age"
mirP.value // 27
mirP.type // Swift.Int
###CocoaPods
To install it, simply add the following line to your Podfile:
use_frameworks!
pod "Mirror"
###Carthage
To integrate Mirror into your Xcode project using Carthage, specify it in your Cartfile:
github "kostiakoval/Mirror"
Please open an issue with bugs and missing features, functionality or ideas for improvements.
Also you can contribute by following this guidelines:
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create pull request
Kostiantyn Koval, [email protected]
Mirror is available under the MIT license. See the LICENSE file for more info.