[英]Typhoon parameter injection with initalizer crashing app
我想在我的应用程序中使用Typhoon( GitHub和WebSite )进行依赖注入。 我使用Swift 3和Typhoon 3.6。 不幸的是,当我尝试初始化对象时,我的应用程序崩溃了。 我有以下协议:
协议
import Foundation
@objc public protocol Client {
func method()
}
协议实施
import Foundation
public class ClientWhateverImpl : NSObject, Client{
let name : String
init(name: name) {
self.name = name
}
public func method(){
//make something
}
}
部件
import Foundation
import Typhoon
public class MyAssembly: TyphoonAssembly {
public dynamic func client() -> AnyObject {
return TyphoonDefinition.withClass(ClientWhateverImpl.self) {
(definition) in
definition!.useInitializer("initWithName:") {
(initializer) in
initializer!.injectParameter(with: "name")
}
} as AnyObject
}
}
叫某处
let myAssembly : MyAssembly = MyAssembly()
myAssembly.activate()
let client = myAssembly.client()
不幸的是,我收到以下错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Method 'initWithName:' not found on 'MyApp.ClientWhateverImpl'. Did you include the required ':' characters to signify arguments?'
我在stackoverflow上阅读了一些有关此错误的文章,但在他们身边,他们忘记了使用objectice-c方法语法。 但就我而言,我使用objc方法“ initWithName”。 迅捷3有什么不同吗? 有人有同样的问题吗?
好。 我发现了问题。 它与我要注入的对象有关。 它不是从NSObject
继承而来的,而Typhoon却使它失败了:
definition!.useInitializer("initWithObject:") {
(initializer) in
initializer!.injectParameter(with: MyObject())
}
之前:
public class MyObject{
}
解:
public class MyObject: NSObject{
}
该文档甚至说:
您要注入的每个类都必须以某种方式成为NSObject的子类(通过子类化或添加@objc修饰符)。
我只是认为ClientWhateverImpl
就必须继承自NSObject
。 我的错。 这个问题已经关闭
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.