带视图控制器的台风 属性

Typhoon with view controller property

我有class:

class InformationTableViewController: UITableViewController {
    private var cos: Int!
}

我正在尝试注入 属性:

public dynamic func informationTableViewController() -> AnyObject {
    return TyphoonDefinition.withClass(InformationTableViewController.self) {
        (definition) in

        definition.injectProperty("cos", with: 3)
    }
}

当它是一个简单的 class 时它工作正常。但是当我在 Storyboard 上使用 InformationTableViewController 时(如某些视图 class),我收到错误消息:

'Can't inject property 'cos' for object 'Blah.InformationTableViewController: 0x7fca3300afe0'. Setter selector not found. Make sure that property exists and writable'

有什么问题?

私有访问修饰符将实体的使用限制在其自己的定义源文件中。

所以一个问题是您正试图从私有范围之外设置您的 属性。从 属性 声明中删除私有关键字。

这里的另一个问题是您正在尝试注入原始类型。

在 Obj-C 中,Typhoon 支持注入原始类型,但 Swift 中还没有。

你想要注入的每个 class 都必须以某种方式成为 NSObject 的子class(通过 subclassing 或添加 @objc 修饰符)。

作为一种解决方法,您可以使用 NSNumber 而不是 属性 的 Int 类型。

class InformationTableViewController: UITableViewController {
   var cos: NSNumber!
}

程序集:

public dynamic func informationTableViewController() -> AnyObject {
    return TyphoonDefinition.withClass(InformationTableViewController.self) {
        (definition) in

        definition.injectProperty("cos", with: NSNumber.init(int: 3))
    }
}