Skip to content

kostiakoval/Mirror

Folders and files

NameName
Last commit message
Last commit date

Latest commit

5e9278b · Feb 7, 2016

History

73 Commits
Jul 11, 2015
Jul 13, 2015
Jul 11, 2015
Aug 14, 2015
Jul 11, 2015
Aug 14, 2015
Aug 14, 2015
Jul 10, 2015
Jul 11, 2015
Jul 10, 2015
Jun 30, 2015
Aug 13, 2015
Jul 10, 2015
Jul 10, 2015
Dec 15, 2015

Repository files navigation

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.