是在Swift中使用VAR还是在实例中创建



应该使用什么来创建Swift的类实例,为什么?

请在swift

中创建实例创建期间的使用和var的用法

以下是代码: -

class ConstantTest{
    let constant: String
    init(constant: String) {
        self.constant = constant
    }
    func printConstant() {
        print(constant)
    }
}
let constanttest = ConstantTest(constant: "Hello")
constanttest.printConstant()
var test = ConstantTest(constant: "Hie")
test.printConstant()

使用let如果:

  • 这是一个常数(或在参考类型(例如class)的情况下,如果无法用其他参考替换该引用);和
  • 您可以在初始化过程中设置它。

但是,如果您需要在以后更改它,请使用var,例如其值不是恒定的变量(或在参考类型的情况下,如果需要用另一个实例替换)。但是,在初始化过程中未设置值的变量和属性,您必须使用var。例如,lazy存储的属性使用var,因为初始化过程完成时未设置其值,而仅当您首次引用它时。另一个示例包括视图控制器对其插座的引用,这些引用仅在稍后创建视图层次结构时被连接。

不必说,计算的属性也使用var

但是,如果您可以使用let,则应该这样做,因为如果您知道什么是常数和什么是变量,则更容易编写安全代码。在您的示例中,您将使用let

注意:在参考类型(例如class类型)的情况下,let并不意味着对象本身一定是不可变的,仅仅是您不能用另一个实例替换它。如果您想控制它是否不变,请考虑使用值类型(例如 struct)。


让我看看我是否可以更清楚最后一个说明。考虑:

class Foo {
    var value: String
    init(value: String) {
        self.value = value
    }
}

然后允许以下内容:

let obj = Foo(value: "a")
obj.value = "b"           // changing mutable property of reference type, Foo, is permitted

,但以下内容不是:

let obj = Foo(value: "a")
obj = Foo(value: "b")     // replacing `obj` with a new instance of `Foo`, is not

如果您不想更改value属性,则可以将value定义为不可变(或至少,至少不可公开可变),例如:

class Foo {
    let value: String      // or `private(set) var value: String`
    init(value: String) {
        self.value = value
    }
}

或不将Foo定义为class(参考类型),而是将其定义为struct(值类型):

struct Foo {
    var value: String
    init(value: String) {
        self.value = value
    }
}
let obj = Foo(value: "a")
obj.value = "b"            // this is not permitted, because Foo value-type, `obj`, was declared with `let`, making it immutable

请注意,最终的示例,将Foo声明为值类型(A struct)确实完全改变了它,例如

var obj1 = Foo(value: "a")
var obj2 = obj1            // this value is a copy of `obj1` not a reference to the same object that `obj1` pointed to
obj1.value = "b"
print("(obj1.value)")     // will print "b"
print("(obj2.value)")     // will print "a"

但是,价值类型虽然需要使用它们略有不同的思维方式才能使用它们,但对于易于编写安全的代码非常有用。请参阅WWDC 2015在Swift中构建具有价值类型的更好的应用程序。

使用每种都有不同的理由。解释这一点的最简单方法是let用于定义常数,而var用于定义变量。使用let时,该值无法更改。因此,在您的应用程序中,如果您需要可以更改的值,请使用var。同样,您可能会想到寻找答案,因为这个问题有很多重复。

来源:https://developer.apple.com/library/content/documentation/swift/conceptual/swift_programming_language/thebasics.html

相关内容

  • 没有找到相关文章

最新更新