繁体   English   中英

带有Initalizer崩溃应用程序的台风参数注入

[英]Typhoon parameter injection with initalizer crashing app

我想在我的应用程序中使用Typhoon( GitHubWebSite )进行依赖注入。 我使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM