在ios Swift中声明变量之间的区别?

时间:2016-02-16 05:17:25

标签: ios swift declaration

我最近正在学习Swift,我发现变量有两种类型的声明。

var indexArray = NSMutableArray()     //and
var indexArray : NSMutableArray = NSMutableArray()

我只是想知道它们之间有什么区别?它会在任何类型的值中复制变量吗?

4 个答案:

答案 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

当然,如果你声明一个没有赋值的变量,你就不能从赋值源中自动获取类型,那么你需要显式类型声明。