我上课了:
class InformationTableViewController: UITableViewController {
private var cos: Int!
}
我试图注入财产:
public dynamic func informationTableViewController() -> AnyObject {
return TyphoonDefinition.withClass(InformationTableViewController.self) {
(definition) in
definition.injectProperty("cos", with: 3)
}
}
如果它是一个简单的类,它可以正常工作。但是当我在Storyboard上使用InformationTableViewController(作为一些视图类)时,我收到了错误:
'Can't inject property 'cos' for object 'Blah.InformationTableViewController: 0x7fca3300afe0'. Setter selector not found. Make sure that property exists and writable'
问题是什么?
答案 0 :(得分:0)
私有访问修饰符将实体的使用限制在其自己的定义源文件中。
所以一个问题是你试图从私有范围之外设置你的属性。从属性声明中删除私有关键字。
这里的另一个问题是你正在尝试注入原始类型。
在Obj-C中Typhoon支持注入原始类型但不支持Swift。
您要注入的每个类都必须以某种方式成为NSObject的子类(通过子类化或添加@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))
}
}