可以在Swift 2中设置一个等于另一个变量的变量吗?

时间:2015-12-25 06:45:34

标签: ios swift2

我对Swift相对较新,并且想知道是否可以在Swift中设置一个等于另一个变量的变量。我有一个虚拟计数器变量,我想设置等于另一个变量,但它给了我一个错误。它似乎可以在Playground环境中使用,但不能在ViewController中使用。

import UIKit
class ViewController: UIViewController {
    var count = 10.0
    var count2 = count
    ...
}

由于

4 个答案:

答案 0 :(得分:5)

在这种情况下,我建议你使用一个只在你访问时才初始化的惰性属性:

import UIKit
class ViewController: UIViewController {
    var count = 10.0
    lazy var count2: Int = { self.count }()
    ...
}

有关语法和语义的更多信息:

  • 懒惰:上面解释

  • { self.count }:一个闭包,它只是一个没有名字的函数,并在正文后面用括号()执行。

    就像一个函数一样,它有一个返回类型(Int),在这种情况下,Swift推断出return所以闭包相当于{ return self.count }

有关详情,请参阅以下关于closureslazy initialization的链接。

答案 1 :(得分:0)

我尝试按如下方式更改它并且它确实没有给我错误消息msg实例成员数不能在视图控制器中使用。

var count = 10.0
   var count2: Int? {
    return Int(count)
}

答案 2 :(得分:0)

我不确定,如果我理解你的需求,但很可能你可以使用属性观察者来获取“变量”以强制它们具有相同的值

struct S {
    var a: Int = 0 {
        didSet {
            if b != a {
                b = a
            }
        }
    }
    var b: Int = 0 {
        didSet {
            if a != b {
                a = b
            }
        }
    }
}

var s = S()
s.a = 10
print(s)    // S(a: 10, b: 10)
s.b = 100
print(s)    // S(a: 100, b: 100)

答案 3 :(得分:0)

只需在类中声明变量时设置类型或初始值:

var count = 10
var count2 : Int

然后,在类的初始化器中将它们设置为相等:

init() {
     count2 = count
}