我试图在类的扩展上声明IBOutlet
属性。但是它给出的错误是
不允许没有getter/setter方法的var声明
class ExampleView : UIView
{
}
extension ExampleView
{
@IBOutlet var btn1, btn2 : UIButton // here I got error.
}
有没有人建议我做这件事的正确方法? From Extensions
-> Computed Properties
in The Swift Programming Language
注意
扩展可以添加新的计算属性,但不能添加存储属性属性,或向现有属性添加属性观察器。
对twlkyao的评论的补充:这是我对Double
的absoluteValue
属性的实现
extension Double {
var absoluteValue: Double {
if self >= 0 {
return self
} else {
return -self
}
}
}
// Simple test -> BOTH println() should get called.
var a = -10.0
if (a < 0) {
println("Smaller than Zero")
}
if (a.absoluteValue > 5) {
println("Absolute is > 5")
}
From The Swift Programming Language:
Swift中的扩展可以:
- 添加计算属性和静态属性
定义实例方法和类型方法- 提供新的初始化项
- 定义下标
- 定义和使用新的嵌套类型
这意味着你不能添加IBOutlets和其他存储属性。如果你真的想作弊,你可以创建全局变量或一个簿记对象,它允许你查询这些变量或对象,以便添加那些属性(并使它们成为计算属性)。
但这似乎违背了最佳实践。我只有在绝对没有其他办法的情况下才会这么做。