我只是问自己为什么我不能直接在Swift的Class声明中做这样的事情:
let width = 200.0
let height = 30.0
let widthheight = width-height
我无法使用其他2个常量创建常量。如果我在函数/方法中使用它,一切正常。
由于
答案 0 :(得分:11)
当您撰写let widthheight = width - height
时,这隐含意味着let widthheight = self.width - self.height
。在Swift中,在完成所有成员的初始化之前,不允许使用self
- 此处包括widthheight
。
你可以在init
方法中获得更多的灵活性,你可以写下这样的东西:
class Rect {
let width = 200.0
let height = 30.0
let widthheight: Double
let widthheightInverse: Double
init() {
// widthheightInverse = 1.0 / widthheight // widthheight not usable yet
widthheight = width - height
widthheightInverse = 1.0 / widthheight // works
}
}
答案 1 :(得分:1)
这是计算属性的候选者:
class Foo {
let width = 200.0
let height = 30.0
var widthheight : Double { return width - height }
}
你可能会提出一个'但每次都计算出来的问题&#39 ;;也许你的应用程序将依赖于重复进行的单个减法 - 但不太可能。如果减法是个问题,请在widthheight
init()
答案 2 :(得分:-2)
对于类似的东西,你可以使用类变量。代码如下所示:
class var width = 200.0
class var height = 30.0
class var widthheight = width - height
但是当你尝试它时,你会看到编译器错误:
尚不支持类变量
我猜他们还没有实现这个功能。但是现在有一个解决方案。只需将声明移到类声明之外,如下所示:
let width = 200.0
let height = 30.0
let widthheight = width - height
class YourClass { ...