Latest 0.1.0
Homepage https://github.com/devxoul/TypedKey
License MIT
Platforms ios 8.0, osx 10.9, tvos 9.0, requires ARC
Authors

Swift
Build Status
CocoaPods
Carthage compatible

Statically-typed key for Swift.

Design Goal

A design goal of TypedKey is to provide statically typed key-value interface to Cocoa APIs.

At a Glance

Key Definition
let myKey = Key<String, Int>("myKey")
myKey.key // "myKey"
myKey.keyType // `String`
myKey.valueType // `Int`
NSUserDefaults
let userIDKey = StringKey<Int>("userID")
NSUserDefaults.standardUserDefaults().setObject(10, forKey: userIDKey)
NSUserDefaults.standardUserDefaults().objectForKey(userIDKey) // statically typed `Int?`
UITableView
let userCellIdentifier = StringKey<UserCell><("userCell")
tableView.registerCell(userCellIdentifier)
tableView.dequeueCell(userCellIdentifier) // statically typed `UserCell?`
UICollectionView
let photoCellIdentifier = StringKey<PhotoCell><("photoCell")
collection.registerCell(photoCellIdentifier)
collection.dequeueCell(photoCellIdentifier, forIndexPath: ...) // statically typed `PhotoCell?`
Anything Else?

Pull requests are welcomed 💖

Advanced Usage

Creating Custom Typed Key

To create your custom typed key, you should implement TypedKey protocol. For example, this is how StringKey is implemented:

public struct StringKey<Value>: TypedKey {
    public typealias KeyType = String
    public typealias ValueType = Value

    public let key: KeyType
    public init(_ key: KeyType) {
        self.key = key
    }
}

Creating Custom Interface

You can make static typing key-value interface with TypedKey. Functions should use generic with type constraint on TypedKey. A type of the value can be inferred from the generic by using ValueType.

func set<T: TypedKey>(key: T, value: T.ValueType) {
    // do something great
}

A protocol TypedKey has two type aliases: KeyType and ValueType. You can make generic constraints on it.

func set<T: TypedKey where T.KeyType == String, T.ValueType: AnyObject>(key: T, value: T.ValueType) {
    // do something great with String key and AnyObject value
}

Installation

  • For iOS 8+ projects with CocoaPods:

    pod 'TypedKey', '~> 0.1.0'
  • For iOS 8+ projects with Carthage:

    github "devxoul/TypedKey" ~> 0.1.0
  • For iOS 7 projects with CocoaSeeds:

    github 'devxoul/TypedKey', '0.1.0', :files => 'Sources/*.swift'
  • Using Swift Package Manager:

    import PackageDescription
    
    let package = Package(
        name: "MyAwesomeApp",
        dependencies: [
            .Package(url: "https://github.com/devxoul/TypedKey", "0.1.0"),
        ]
    )

License

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

Latest podspec

{
    "name": "TypedKey",
    "version": "0.1.0",
    "summary": "Statically-typed key for Swift.",
    "homepage": "https://github.com/devxoul/TypedKey",
    "license": {
        "type": "MIT",
        "file": "LICENSE"
    },
    "authors": {
        "Suyeol Jeon": "[email protected]"
    },
    "source": {
        "git": "https://github.com/devxoul/TypedKey.git",
        "tag": "0.1.0"
    },
    "source_files": "Sources/*.swift",
    "requires_arc": true,
    "platforms": {
        "ios": "8.0",
        "osx": "10.9",
        "tvos": "9.0"
    }
}

Pin It on Pinterest

Share This