快速宣言的问题

时间:2014-06-10 12:17:21

标签: ios xcode swift

我只是问自己为什么我不能直接在Swift的Class声明中做这样的事情:

let width = 200.0
let height = 30.0

let widthheight = width-height

我无法使用其他2个常量创建常量。如果我在函数/方法中使用它,一切正常。

由于

3 个答案:

答案 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 { ...