Skip to content
Swift objects Reflection
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Example
Image
Mirror.playground
Mirror.xcodeproj
Mirror.xcworkspace
Mirror
MirrorTests
Pods
.gitignore
.travis.yml
LICENSE
Mirror.podspec
Podfile
Podfile.lock
README.md

README.md

Mirror

CI Status Version Carthage compatible License Platform

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)

Usage

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)

Inspect it

//Get information about the type of an instance

mirror.name
//"MirrorTest.Person"

mirror.shortName
//Person

mirror.memorySize
// 32

mirror.isClass
//false

mirror.isStruct
//true

Type Properties Inspection

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"]

Mirror is a CollectionType

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

Installation

###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"

Contribute

Please open an issue with bugs and missing features, functionality or ideas for improvements.
Also you can contribute by following this guidelines:

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create pull request

Author

Kostiantyn Koval, konstantin.koval1@gmail.com

License

Mirror is available under the MIT license. See the LICENSE file for more info.

You can’t perform that action at this time.