Ios 具有视图控制器属性的台风

Ios 具有视图控制器属性的台风,ios,swift,typhoon,Ios,Swift,Typhoon,我有课: class InformationTableViewController: UITableViewController { private var cos: Int! } 我正在尝试注入属性: public dynamic func informationTableViewController() -> AnyObject { return TyphoonDefinition.withClass(InformationTableViewController.se

我有课:

class InformationTableViewController: UITableViewController {
    private var cos: Int!
}
我正在尝试注入属性:

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

        definition.injectProperty("cos", with: 3)
    }
}
当它是一个简单的类时,它正常工作。但当我将故事板上的InformationTableViewController用作某个视图类时,我得到了一个错误:

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

问题出在哪里?

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

因此,一个问题是,您试图从it私有范围之外设置属性。从属性声明中删除private关键字

这里的另一个问题是您正在尝试注入基元类型

在Obj-C中,台风有注入原始类型的支持,但在Swift中还没有

通过子类化或添加@objc修饰符,要注入的每个类都必须以某种方式成为NSObject的子类

作为一种解决方法,您可以对属性使用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))
    }
}

谢谢你的解释!可以注射吗?是的,我现在仔细检查过了,效果很好。数组是对象类型,与NSArray和NSSet类似。但是,如果您将多个数据属性注入到ViewController中,那么最好将数据包装到某个DataModel类中,该类将保存您的数据属性,比如Set,或者其他什么?只是为了让抽象更清晰,看看这页关于在Swift Typhone版本中可以注入什么好吧,我使用的是Realm framework,我试图在SomeType:Object存在相同问题的地方注入结果。