The utility interface for Associated Object. If you use this, you can attach any variables in extension.
protocol Animal {}
enum AnimalPropertyKeys: String, ExtensionPropertyKey {
case name
}
final class Dog: Animal {}
extension Dog: ExtensionProperty {}
// Declare setter and getter to property
extension Animal where Self: ExtensionProperty {
var name: String {
get {
return getProperty(key: AnimalPropertyKeys.name, defaultValue: "")
}
set {
setProperty(key: AnimalPropertyKeys.name, newValue: newValue)
}
}
}
let dog = Dog()
// You can assign string to dog.name
dog.name = "Autumn"
Please check out and try the unit test.
If you’re using Carthage, simply add ExtensionProperty to your Cartfile
:
github "cats-oss/ExtensionProperty"
ExtensionProperty is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'ExtensionProperty'
If you’re using Swift Package Manager, simply add ExtensionProperty to your Package.swift
:
dependencies: [
.package(url: "https://github.com/cats-oss/ExtensionProperty", from: "1.0.2")
]
- Xcode 9.3
- Swift 4.1 or greater
ExtensionProperty is available under the MIT license. See the LICENSE file for more info.