使用初始化器崩溃应用程序的台风参数注入
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?'
我在 Whosebug 上阅读了一些关于此错误的帖子,但他们忘记使用 objectice-c 方法语法。但就我而言,我使用 objc 方法 "initWithName"。 swift 3 有什么不同吗?有人遇到同样的问题吗?
好的。我发现了问题。它与我想注入的对象有关。它不继承自 NSObject
,Typhoon 用它做了一些事情但失败了:
definition!.useInitializer("initWithObject:") {
(initializer) in
initializer!.injectParameter(with: MyObject())
}
之前:
public class MyObject{
}
解法:
public class MyObject: NSObject{
}
文档甚至说:
Every class you want to inject has to be a subclass of NSObject in
some way (either by subclassing or adding @objc modifier).
我只是认为我的 ClientWhateverImpl
必须继承自 NSObject
。我的错。此问题已关闭
我想在我的应用程序中使用 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?'
我在 Whosebug 上阅读了一些关于此错误的帖子,但他们忘记使用 objectice-c 方法语法。但就我而言,我使用 objc 方法 "initWithName"。 swift 3 有什么不同吗?有人遇到同样的问题吗?
好的。我发现了问题。它与我想注入的对象有关。它不继承自 NSObject
,Typhoon 用它做了一些事情但失败了:
definition!.useInitializer("initWithObject:") {
(initializer) in
initializer!.injectParameter(with: MyObject())
}
之前:
public class MyObject{
}
解法:
public class MyObject: NSObject{
}
文档甚至说:
Every class you want to inject has to be a subclass of NSObject in some way (either by subclassing or adding @objc modifier).
我只是认为我的 ClientWhateverImpl
必须继承自 NSObject
。我的错。此问题已关闭