在 ios Swift 中声明变量的区别?
Difference between declaring a variable in ios Swift?
最近在学习Swift,发现一个变量有两种声明方式。
var indexArray = NSMutableArray() //and
var indexArray : NSMutableArray = NSMutableArray()
我只是想知道它们之间有什么区别?它会复制任何类型的变量赋值吗?
这里简单解释一下
var indexArray = NSMutableArray()
如上所述, indexArray 变量可以是任何一个, String , Int ,......。你没有特别为该变量指定任何类型。
var indexArray : NSMutableArray = NSMutableArray()
这里你特意给出indexArray是一个NSMutableArray
您可以在声明常量或变量时提供类型注释,以明确常量或变量可以存储的值的类型。通过在常量或变量名称后放置一个冒号,然后是 space,然后是要使用的类型的名称来编写类型注释。
此示例为名为 welcomeMessage 的变量提供类型注释,以指示该变量可以存储字符串值:
var welcomeMessage: String
声明中的冒号表示“……类型……”,因此上面的代码可以读作:
声明一个名为 welcomeMessage 的变量,它是字符串类型。
短语“of type String”的意思是“可以存储任何字符串值”。将其视为可以存储的“事物的类型”(或“事物的种类”)。
现在可以将 welcomeMessage 变量设置为任何字符串值而不会出错:
welcomeMessage = "Hello"
您可以在一行中定义多个相同类型的相关变量,以逗号分隔,并在最终变量名后添加一个类型注释:
var red, green, blue: Double”
*注*
实践中很少需要写类型注解。如果您在定义常量或变量时为其提供初始值,Swift 几乎总能推断出用于该常量或变量的类型,如类型安全和类型推断中所述。在上面的 welcomeMessage 示例中,没有提供初始值,因此 welcomeMessage 变量的类型是用类型注释指定的,而不是从初始值推断出来的。
Excerpt From: Apple Inc. “The Swift Programming Language (Swift 2
Prerelease).” iBooks. https://itun.es/us/k5SW7.l
在第一种情况下,indexArray 自动采用赋值源的类型,因此在您的示例中,语句完全相同。
除了第二个版本更明确之外的区别在于,在第二种情况下,您 可以 调整 indexArray 的类型 - 例如到基础 class;
var indexArray = NSMutableArray() // indexArray is type NSMutableArray
var indexArray : NSArray = NSMutableArray() // indexArray is type NSArray
// but contains an NSMutableArray
当然,如果你声明一个变量而不赋值,你不能从赋值源中自动获取类型,所以你需要显式类型声明。
Swift 的一个重要语言特性是 类型推断 。这意味着一个变量可以根据它所赋的值来识别它的类型。
var indexArray = NSMutableArray()
通过上面的语句,隐式知道变量indexArray
是NSMutableArray
类型,无需指定。
而在另一种类型的声明中,
var indexArray : NSMutableArray = NSMutableArray()
您在为变量 indexArray
赋值之前明确指定其类型为 NSMutableArray
。如果你给它分配不同的类型,编译器会抛出一个错误。
var indexArray : NSMutableArray = NSString() // This is wrong
一个很好的起点是复习 Apple 的 Swift Language document。
没有区别,都是一样的..
以下声明存在差异,
var welcomeMessage:字符串? - 在任何时间点都可以为 nil 或赋值为 nil
var welcomeMessage: 字符串! - 在使用该变量时任何时候都不能为 nil。
var welcomeMessage: String - 将抛出错误提示,class 没有初始值设定项
但是下面两个没有区别,
var welcomeMessage: String = String()
var welcomeMessage = String()
最近在学习Swift,发现一个变量有两种声明方式。
var indexArray = NSMutableArray() //and
var indexArray : NSMutableArray = NSMutableArray()
我只是想知道它们之间有什么区别?它会复制任何类型的变量赋值吗?
这里简单解释一下
var indexArray = NSMutableArray()
如上所述, indexArray 变量可以是任何一个, String , Int ,......。你没有特别为该变量指定任何类型。
var indexArray : NSMutableArray = NSMutableArray()
这里你特意给出indexArray是一个NSMutableArray
您可以在声明常量或变量时提供类型注释,以明确常量或变量可以存储的值的类型。通过在常量或变量名称后放置一个冒号,然后是 space,然后是要使用的类型的名称来编写类型注释。
此示例为名为 welcomeMessage 的变量提供类型注释,以指示该变量可以存储字符串值:
var welcomeMessage: String
声明中的冒号表示“……类型……”,因此上面的代码可以读作:
声明一个名为 welcomeMessage 的变量,它是字符串类型。
短语“of type String”的意思是“可以存储任何字符串值”。将其视为可以存储的“事物的类型”(或“事物的种类”)。
现在可以将 welcomeMessage 变量设置为任何字符串值而不会出错:
welcomeMessage = "Hello"
您可以在一行中定义多个相同类型的相关变量,以逗号分隔,并在最终变量名后添加一个类型注释:
var red, green, blue: Double”
*注*
实践中很少需要写类型注解。如果您在定义常量或变量时为其提供初始值,Swift 几乎总能推断出用于该常量或变量的类型,如类型安全和类型推断中所述。在上面的 welcomeMessage 示例中,没有提供初始值,因此 welcomeMessage 变量的类型是用类型注释指定的,而不是从初始值推断出来的。
Excerpt From: Apple Inc. “The Swift Programming Language (Swift 2 Prerelease).” iBooks. https://itun.es/us/k5SW7.l
在第一种情况下,indexArray 自动采用赋值源的类型,因此在您的示例中,语句完全相同。
除了第二个版本更明确之外的区别在于,在第二种情况下,您 可以 调整 indexArray 的类型 - 例如到基础 class;
var indexArray = NSMutableArray() // indexArray is type NSMutableArray
var indexArray : NSArray = NSMutableArray() // indexArray is type NSArray
// but contains an NSMutableArray
当然,如果你声明一个变量而不赋值,你不能从赋值源中自动获取类型,所以你需要显式类型声明。
Swift 的一个重要语言特性是 类型推断 。这意味着一个变量可以根据它所赋的值来识别它的类型。
var indexArray = NSMutableArray()
通过上面的语句,隐式知道变量indexArray
是NSMutableArray
类型,无需指定。
而在另一种类型的声明中,
var indexArray : NSMutableArray = NSMutableArray()
您在为变量 indexArray
赋值之前明确指定其类型为 NSMutableArray
。如果你给它分配不同的类型,编译器会抛出一个错误。
var indexArray : NSMutableArray = NSString() // This is wrong
一个很好的起点是复习 Apple 的 Swift Language document。
没有区别,都是一样的..
以下声明存在差异,
var welcomeMessage:字符串? - 在任何时间点都可以为 nil 或赋值为 nil
var welcomeMessage: 字符串! - 在使用该变量时任何时候都不能为 nil。
var welcomeMessage: String - 将抛出错误提示,class 没有初始值设定项
但是下面两个没有区别,
var welcomeMessage: String = String()
var welcomeMessage = String()