【问题标题】:Problems with Swift DeclarationSwift 声明的问题
【发布时间】:2014-06-10 12:17:21
【问题描述】:

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

let width = 200.0
let height = 30.0

let widthheight = width-height

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

谢谢

【问题讨论】:

标签: ios xcode swift


【解决方案1】:

在写let widthheight = width - height,这隐含手段let widthheight = self.width - self.height。在斯威夫特,你只是不允许使用self直到所有的成员都被初始化 - 在这里,包括widthheight P>

您有一点在一个多一点灵活性init方法,不过,在这里你可以这样写: P>

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
    }

}

【讨论】:

    【解决方案2】:

    这是一个计算属性的候选对象:

    class Foo {
      let width = 200.0
      let height = 30.0
      var widthheight : Double { return width - height }
    }
    

    您可能会提出“但每次都会计算”的问题;也许您的应用程序将依赖于重复执行的单个减法 - 但不太可能。如果减法有问题,请在init() 中设置widthheight

    【讨论】:

      【解决方案3】:

      对于这样的事情,您可以使用类变量。代码如下所示:

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

      【讨论】:

      • 我认为您完全混淆了不能解决 OP 问题的不同概念。
      • 在多种语言中使用静态(类)变量和常量是一种很好的做法。它确实在不覆盖任何方法的情况下解决了 OP 的问题。
      • 如果 OP 试图对对象的字段/属性进行建模:静态/类字段不合适,全局变量也不合适。
      • 他试图让它们保持不变。这就是为什么他们甚至不应该被绑定到任何实例。常量应保持在类型(类)范围内。
      猜你喜欢
      • 1970-01-01
      • 2021-08-03
      • 2021-04-21
      • 2011-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多