这些属性之间的区别是什么?

时间:2015-05-23 05:29:00

标签: ios swift

我创建了一个具有两个属性的类RootView,以不同的方式声明。现在我想知道这两个声明之间的区别是什么?

class RootView: UIViewController {

    // MARK: - Variables
    var rightMenu: RightMenu = RightMenu()
    let right = RightMenu()

}

请指导我rightrightMenu之间的区别?

2 个答案:

答案 0 :(得分:1)

两者都属于同一类型,但下面是几点,可以告诉您何时需要Type Annotation,何时不需要。

这里有一些概念。

  1. 您的rightMenu是一个变量,您在更改点重新分配相同类型的值,其中right是常量,您无法重新分配新值。

  2. Swift引入了类型推断概念,如果你指定一个没有提供类型的值(文字),它将直接为你确定类型。所以需要为它提供明确的类型。您rightMenuright的类型相同。

  3. 如果在声明时将初始值赋给变量,理想情况下不需要提供显式类型。

    a) var myClass: MyClass!
    

    在这里你需要提供类型,因为没有提供初始值,你想在以后为它赋值。

    b) var myClass = MyClass()
    

    这里没有必要,因为你提供了一个初始值,Swift编译器会自动确定它的类型。

    在调用:符号Type Annotation后,变量或常量的Swift提供/声明类型。有关详细信息,请参阅Apple documentation

答案 1 :(得分:1)

唯一的区别是这两个变量的可变性。您可以更改rightMenu,因为它是可变的。但是,right不可变。这意味着right是常数。

从语法预测中,您在声明:RightMenu时不一定要添加rightMenu。就像声明right一样,编译器会将对象推断为RightMenu的类型。但是,当你只想声明一些东西而不初始化它。您可能需要使用:<type>?告诉编译器此ivar的类型和值可能会丢失。