我最近正在学习Swift,我发现变量有两种类型的声明。
var indexArray = NSMutableArray() //and
var indexArray : NSMutableArray = NSMutableArray()
我只是想知道它们之间有什么区别?它会在任何类型的值中复制变量吗?
答案 0 :(得分:1)
这是一个简单的解释
var indexArray = NSMutableArray()
如上所述,indexArray变量可以是任何一个,String,Int,.......你没有具体给出该变量的任何类型。
var indexArray : NSMutableArray = NSMutableArray()
在这里你明确指出indexArray是一个NSMutableArray
您可以在声明常量或变量时提供类型注释,以明确常量或变量可以存储的值的类型。通过在常量或变量名称后面放置一个冒号,后跟一个空格,后跟要使用的类型的名称来编写类型注释。
此示例为名为welcomeMessage的变量提供类型注释,以指示该变量可以存储String值:
var welcomeMessage: String
声明中的冒号表示“......类型......”,因此上面的代码可以理解为:
声明一个名为welcomeMessage的变量,其类型为String。
短语“of String”意味着“可以存储任何字符串值。”可以将其视为可以存储的“事物类型”(或“事物类型”)。
现在可以将welcomeMessage变量设置为任何字符串值而不会出现错误:
welcomeMessage = "Hello"
您可以在一行上定义相同类型的多个相关变量(以逗号分隔),在最终变量名称后面使用单个类型注释:
var red, green, blue: Double”
*注意*
您很少需要在实践中编写类型注释。如果在定义的位置为常量或变量提供初始值,则Swift几乎总是可以推断出用于该常量或变量的类型,如类型安全和类型推断中所述。在上面的welcomeMessage示例中,没有提供初始值,因此welcomeMessage变量的类型使用类型注释指定,而不是从初始值推断。
摘录自:Apple Inc.“Swift编程语言(Swift 2 预售)。“iBooks。 https://itun.es/us/k5SW7.l
答案 1 :(得分:1)
Swift的一个重要语言功能是类型推断。这意味着变量可以根据其赋值的值来识别其类型。
indexArray
通过上述陈述,隐含地知道变量NSMutableArray
的类型为var indexArray : NSMutableArray = NSMutableArray()
而未指定。
而在另一种声明中,
indexArray
在为其赋值之前,您明确指定变量NSMutableArray
的类型为var indexArray : NSMutableArray = NSString() // This is wrong
。如果为其指定了不同的类型,编译器将抛出错误。
{{1}}
一个非常好的起点是通过Apple查看Swift Language document。
答案 2 :(得分:1)
没有区别,两者都是一样的..
以下声明之间存在差异,
var welcomeMessage:String? - 在任何时间点都可以是零或指定为零
var welcomeMessage:String! - 使用该变量时,任何时候都不能为零。
var welcomeMessage:String - 将抛出错误说,类没有初始值设定项
但是以下两个之间没有区别,
var welcomeMessage:String = String()
var welcomeMessage = String()
答案 3 :(得分:0)
在第一种情况下,indexArray自动获取赋值源的类型,因此在您的示例中,语句完全相同。
除了第二个版本更明确的区别在于,可以调整indexArray的类型 - 例如在第二种情况下调整到基类;
var indexArray = NSMutableArray() // indexArray is type NSMutableArray
var indexArray : NSArray = NSMutableArray() // indexArray is type NSArray
// but contains an NSMutableArray
当然,如果你声明一个没有赋值的变量,你就不能从赋值源中自动获取类型,那么你需要显式类型声明。