台风与视图控制器属性

时间:2015-11-05 13:31:55

标签: ios swift typhoon

我上课了:

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'

问题是什么?

1 个答案:

答案 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))
    }
}