我创建了一个具有两个属性的类RootView
,以不同的方式声明。现在我想知道这两个声明之间的区别是什么?
class RootView: UIViewController {
// MARK: - Variables
var rightMenu: RightMenu = RightMenu()
let right = RightMenu()
}
请指导我right
和rightMenu
之间的区别?
答案 0 :(得分:1)
两者都属于同一类型,但下面是几点,可以告诉您何时需要Type Annotation
,何时不需要。
这里有一些概念。
您的rightMenu
是一个变量,您在更改点重新分配相同类型的值,其中right
是常量,您无法重新分配新值。
Swift引入了类型推断概念,如果你指定一个没有提供类型的值(文字),它将直接为你确定类型。所以需要为它提供明确的类型。您rightMenu
和right
的类型相同。
如果在声明时将初始值赋给变量,理想情况下不需要提供显式类型。
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
的类型和值可能会丢失。