Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 台风韩元';t注入到普通NSObject派生类中_Ios_Swift_Swift3_Typhoon - Fatal编程技术网

Ios 台风韩元';t注入到普通NSObject派生类中

Ios 台风韩元';t注入到普通NSObject派生类中,ios,swift,swift3,typhoon,Ios,Swift,Swift3,Typhoon,我有一个使用Typhone的Swift 3应用程序,它成功地将NSObject派生的对象注入到从UIViewController派生的多个对象中的属性中。我添加了代码,将同一对象注入到仅从NSObject派生的对象中,并且在该对象中执行任何代码时,该属性始终为nil 我的程序集如下所示: class CoreComponents: TyphoonAssembly { dynamic func appInitializer() -> Any { return TyphoonDefin

我有一个使用Typhone的Swift 3应用程序,它成功地将NSObject派生的对象注入到从UIViewController派生的多个对象中的属性中。我添加了代码,将同一对象注入到仅从NSObject派生的对象中,并且在该对象中执行任何代码时,该属性始终为nil

我的程序集如下所示:

class CoreComponents: TyphoonAssembly {
dynamic func appInitializer() -> Any {
    return TyphoonDefinition.withClass(AppInitializer.self) {
        (definition) in

        definition!.injectProperty(Selector(("settings")), with: self.provideSettings())
    }
}

dynamic func sideMenu() -> Any {
    return TyphoonDefinition.withClass(SideMenuTableView.self) {
        (definition) in

        definition!.injectProperty(Selector(("settings")), with: self.provideSettings())
    }
}

dynamic func mapViewController() -> Any {
    return TyphoonDefinition.withClass(MapViewController.self) {
        (definition) in

        definition!.injectProperty(Selector(("settings")), with: self.provideSettings())
    }
}

dynamic func provideSettings() -> Any {
    return TyphoonDefinition.withClass(Settings.self) {
        (definition) in
        definition!.scope = TyphoonScope.singleton
    }
}
class AppInitializer: NSObject {
    var settings: Settings? // Injected property

    // Other code here
}
}

其中,只有第一个方法指定的注入失败。它要注入的对象声明如下:

class CoreComponents: TyphoonAssembly {
dynamic func appInitializer() -> Any {
    return TyphoonDefinition.withClass(AppInitializer.self) {
        (definition) in

        definition!.injectProperty(Selector(("settings")), with: self.provideSettings())
    }
}

dynamic func sideMenu() -> Any {
    return TyphoonDefinition.withClass(SideMenuTableView.self) {
        (definition) in

        definition!.injectProperty(Selector(("settings")), with: self.provideSettings())
    }
}

dynamic func mapViewController() -> Any {
    return TyphoonDefinition.withClass(MapViewController.self) {
        (definition) in

        definition!.injectProperty(Selector(("settings")), with: self.provideSettings())
    }
}

dynamic func provideSettings() -> Any {
    return TyphoonDefinition.withClass(Settings.self) {
        (definition) in
        definition!.scope = TyphoonScope.singleton
    }
}
class AppInitializer: NSObject {
    var settings: Settings? // Injected property

    // Other code here
}
有人看到我做错了什么吗

以下是注入工作的类别的相关部分:

class SideMenuTableView: UITableViewController {
    var settings: Settings?  // Injected property
    // Other code
}

谢谢

为了实现这一点,我放弃了与Objective-C兼容的Typhone版本,转而使用“纯swift”版本的Typhone at。设置需要更多的工作,但代码最终简化了:

class CoreComponents: Assembly {
    func provideSettings() -> Definition {
        return Definition(withClass: Settings.self) { d in
            d.setScope(Definition.Scope.Singletone)
        }
    }
}

class AppInitializer: NSObject {
    let settings = CoreComponents.assembly.provideSettings()
    // More code here
}
这需要在我的AppDelegate的“didFinishLaunchingWithOptions”方法中使用以下行实例化程序集:

Typhoon.activateAssemblies()

你能从它工作的对象中添加一个类似于
AppInitializer
的代码片段吗?我试过了,同样的问题也发生了——注入的属性仍然为零。我的下一个实验将是从头开始创建hello world,并在那里尝试相同的事情,以防项目设置干扰。我的意思是作为代码片段添加到问题中。好的,我已经编辑了原始内容来添加它。我能看到的唯一区别是基类。我使用Xcode和“单视图”模板创建了一个干净的应用程序,为“设置”和“应用初始化器”创建了一个模拟程序,并且遇到了完全相同的问题。在这一点上,我放弃了,并决定尝试阿尔法“纯雨燕”版本。这花了一点时间来完成安装(说明中省略了先创建“Assemblies”和“typhone”目录的必要性),但最终还是成功了。我的所有对象现在都可以注入我所需要的内容。