Skip to content

Key-Value Coding (KVC) for native Swift classes and structs

License

Notifications You must be signed in to change notification settings

zenangst/SwiftKVC

 
 

Repository files navigation

SwiftKVC

SwiftKVC brings key-value coding to native Swift classes and structures. You can easily set and access properties just using a subscript:

var person = Person()
person["name"] = "John"

Or use the more verbose method to catch potential errors:

var person = Person()
do {
  try person.setValue("John", forKey:"name")
} catch {
  print(error)
}

SwiftKVC brings the power of Cocoa style key-value coding to Swift.

Installation

SwiftKVC is available through CocoaPods. To install, simply include the following lines in your podfile:

use_frameworks!
pod 'SwiftKVC'

Be sure to import the module at the top of your .swift files:

import SwiftKVC

Alternatively, clone this repo or download it as a zip and include the classes in your project.

Usage

To enable key-value coding for a native Swift structure or class, simply have it conform to the protocol Model:

extension Person : Model {}

You can then set and retrieve values from your model by key:

person["name"] = "John"
person["age"] = 36
if let id = person["id"] as? Int {
  print(id)
}

If you would like to handle possible errors, you can use the more verbose methods:

do {
  try person.setValue("John", forKey: "name")
  try person.setValue(36, forKey: "age")
  if let id = try person.valueForKey("id") as? Int {
    print(id)
  }
} catch {
  print(error)
}

Be aware that every one of your model's properties must conform to the protocol Property like so:

extension MyCustomType : Property {}

Implicitly unwrapped optional properties will not work properly and should be avoided:

struct User : Model {
  var id: String
  var email: String! // Will not work as expected and may result in a fatal error if set or accessed
}

There is another caveat when using classes. If your class inherits from a superclass with private properties, SwiftKVC will not work as expected and may fail.

Author

Brad Hilton, brad@skyvive.com

License

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

About

Key-Value Coding (KVC) for native Swift classes and structs

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Swift 93.5%
  • Ruby 5.3%
  • Objective-C 1.2%