Resolver
- Push Hero - pure Swift native macOS application to test push notifications
- PastePal - Pasteboard, note and shortcut manager
- Frame recorder - Recorder gif and video with frame
- Alias - App and file shortcut manager
- Other apps
A simple resolver for Swift
[](https://travis-ci.org/Khoa Pham/Resolver)
Usage
To run the example project, clone the repo, and run pod install
from the Example directory first.
Features
Taking example from Swinject
Supposed we have classes and protocols like this
protocol AnimalType {
var name: String? { get }
}
class Cat: AnimalType {
let name: String?
init(name: String?) {
self.name = name
}
}
protocol PersonType {
var pet: AnimalType { get }
func play() -> String
}
class PetOwner: PersonType {
let pet: AnimalType
init(pet: AnimalType) {
self.pet = pet
}
func play() -> String {
let name = pet.name ?? "someone"
return "I'm playing with \(name)."
}
}
Simple factory
let resolver = Resolver()
resolver.register {
Cat(name: "tom") as AnimalType
}
let cat = try! resolver.resolve() as AnimalType
XCTAssert(cat.name == "tom")
Tag
let resolver = Resolver()
resolver.register(tag: "tom") {
Cat(name: "tom") as AnimalType
}
resolver.register(tag: "meo") {
Cat(name: "meo") as AnimalType
}
let tom = try! resolver.resolve(tag: "tom") as AnimalType
let meo = try! resolver.resolve(tag: "meo") as AnimalType
XCTAssert(tom.name == "tom")
XCTAssert(meo.name == "meo")
Argument
let resolver = Resolver()
resolver.register {
Cat(name: "tom") as AnimalType
}
resolver.register { cat in
PetOwner(pet: cat) as PersonType
}
let cat = try! resolver.resolve() as AnimalType
let owner = try! resolver.resolve(arg1: cat) as PersonType
XCTAssert(owner.pet.name == "tom")
XCTAssert(owner.play() == "I'm playing with tom.")
Singleton
let cat = Cat(name: "tom") as AnimalType
let resolver = Resolver()
resolver.registerSingleton(cat)
let someCat = try! resolver.resolve() as AnimalType
XCTAssert(someCat as! Cat === cat as! Cat)
Installation
Resolver is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod "Resolver"
Author
Khoa Pham, onmyway133@gmail.com
License
Resolver is available under the MIT license. See the LICENSE file for more info.