一 、 常量和变量
Swift语言 对常量和变量的声明进行了明白的区分
Swift语言的常量类型比C 语言的constants类型更加强大,语义更加明白。
常量和变量的差别是常量在设置或初始化后其值不同意改变,而变量同意,除此之外。Swift语言中变量类型能使用的地方,常量类型也相同能使用,如作为输入參数等。
Swift语言中常量类型使用let keyword进行声明,变量类型使用var keyword进行声明,如
let maximumNumberOfLoginAttempts
=10
var currentLoginAttempt
=
以上语句声明了一个名字为maximumNumberOfLoginAttempts的常量,其值为10。接着又声明了一个名字为currentLoginAttempt的变量。其初始值为0。
假设一行中仅仅有一条语句。语句最后就不须要带分号。假设一行中带有多条语句,语句之间就须要加分号,而最后一条不须要,这也体现和反应了Swift语言语法设计简洁和明白的思想。例如以下面语句所看到的:
let cat = ""; println(cat)
在Swift中常量和变量能够是不论什么类型。
当声明一个常量或一个变量时,你能够为其提供一个类型标识。来清楚表示该常量或变量的类型。
声明语法是在常量和变量名字后面跟着一个冒号,接着跟着类型的名字。例如以下所看到的声明了一个类型为字符串类型(String)名字为welcomeMessage的变量。
var welcomeMessage: String
在作了以上声明后,welcomeMessage变量就能够设置为不论什么字符串值。如:
welcomeMessage = “Hello"
实际上你非常少须要为一个变量声明或常量声明指定类型。如上面的对maximumNumberOfLoginAttempts常量和currentLoginAttempt变量的声明,Swift编译器可以依据声明中提供的初始值自己主动判断其为Int类型。
例如以下语句Swift判断你想创建一个Double类型的常量。
let pi =3.14159
因次当你定义一个常量或变量时为其提供了一个初始值,就不再须要另外为其指定类型,Swift编译器能够从中判断出其类型。
二、多样化的数字表示。
Swift支持以8位、16位、32, 和64 位形式来表达一个有符号和无符号形式的整数类型。整数类型的命名遵从和C语言相似的约定,如UInt8代表一个8位无符号整数,Int32代表一个32位有符号整数,Swift建议你通常使用Swift定义的一个位数和和当前平台的本地字大小同样的Int整数类型。这样能够保持代码的一致性和互操作性,避免了不同整数类型之间的相互转换。
Swift中整型常量数字的表达能够使用十进制、二进制、八进制、十六进制等多种形式:
let decimalInteger = 17 //十进制表达(没有前缀)
let binaryInteger = 0b10001 // 二进制表达(0b开头)
let octalInteger = 0o21 // 八进制表达(0o开头)
let hexadecimalInteger = 0x11 // 十六进制表达(0x开头)
Swift也提供Double(64位)和Float(32位)两种形式的浮点数支持。
Swift中,浮点数常量数字的表达支持十进制(没有前缀)或十六进制(0x开头)两种形式,并支持不同的指数形式。例如以下所看到的:
1.25e2 means 1.25 × 102, or125.0. 十进制表达形式(不带前缀,指数用大写和小写的e来指示)
0xFp2 means 15 × 22,
or60.0. 十六进制表达形式(以0x开头。指数用大写和小写的p来指示)
Swift中。为了使数字表达更加易读和自然。数字表达格式还能包括额外的信息,如整数和浮点数都能在前面加入额外的0以及在数字之间包括下划线。例如以下所看到的:
let paddedDouble = 000123.456
let oneMillion = 1_000_000
let justOverOneMillion = 1_000_000.000_000_1
三、 多元组
多元组(Tuples)是Swift语言提供的一种新的数据类型,是一种多个数值的组合。一个多元组能够是随意类型甚至是不同类型数值的组合。
例如以下所看到的:let http404Error
= (404,"Not Found")该样例定义了一个描写叙述HTTP状态码的多元组常量http404Error,该常量的类型为(Int, String)的多元组类型。其值为(404, "Not Found")。
该多元组表示了一个整数和一个字符串的组合。
当使用时。你能够从多元组中分解出每一个分离的值。例如以下语句所看到的:
let (statusCode,statusMessage)
=http404Errorprintln("The status code is\(statusCode)")
// prints "The status code is 404"
println("The status message is\(statusMessage)")
// prints "The status message is Not Found"
当你仅须要多元组的部分值时,能够使用符合‘_’来指示忽略的其他项:
let (justTheStatusCode,_)
=http404Errorprintln("The status code is\(justTheStatusCode)")
// prints "The status code is 404"
另外还能够使用索引来存取一个多元组中的每一个独立的项:
println("The status code is\(http404Error.0)")
// prints "The status code is 404"
println("The status message is\(http404Error.1)")
// prints "The status message is Not Found"
当多元组定义时你还能够为多元组中的每个独立项命名:
let http200Status
= (statusCode:200,description:“OK")
然后你能够使用命名的元素名来存取这些元素的值:
println("The status code is\(http200Status.statusCode)")
// prints "The status code is 200"
println("The status message is\(http200Status.description)")
// prints "The status message is OK”
多元组主要用于函数的返回值,假设一个函数须要返回多个值。如一个函数须要返回上面描写叙述的HTTP状态码,就能够定义和返回一个上面描写叙述的的多元组。
多元组类型提供了一种简洁的方式使一个函数能够返回多个不同类型的返回值。
多元组适合于创建相关值的暂时组合。而不适合于创建复杂的数据结构。
四 、选项类型:
选项类型是Swift语言提供的又一种强大的新的数据类型,用来表达一个可能存在也可能不存在的值类型。
与选项类型能力最接近的是Objective-C语言中的一个可能返回一个对象,也可能返回一个nil的方法的使用。
在Objective-C语言中nil意味着一个有效对象的不存在,但在Objective-C语言中nil仅可以工作于对象。而不能工作于结构以及其他基本C类型或者枚举类型。
对于这些类型值的不存在Objective-C语言用一个NSNotFound特殊值表示。
而Swift的选项类型能够指示不论什么类型值的不存在,而不须要另外定义不论什么其他特殊值。
如一个字符串类型可以使用其方法toInt来转换一个字符串的值为一个整数,但是。不是每个字符串都可以转换为一个整数。如含有数字的字符串如"123"
能够进行转换,而不含数字的字符串如"hello, world" 则不能转换。这样的情况假设使用选项类型就很实用。
如样例:
let possibleNumber
="123"let convertedNumber =possibleNumber.toInt()
因为toInt方法可能失败,因此编译器判断possibleNumber.toInt()返回的是一个optional Int类型。
一个 optional Int
类型在语法上写作:Int?。选项类型的变量或常量指示该常量或变量同意没有值。
‘?’标识符指示该值是一个选项类型。意味着该类型值能够包括有效的整数值。也可能什么值也没有包括。
Swift中你可以使用if语句来推断一个选项是否包括一个值。假设一个选项包括一个值,它被评估为true。否则评估为false。假设使用if语句评估一个选项包括了一个值。然后就行在选项名字后面加入一个!来获取该选项的值。
这在Swift语言中称作选项值的强制展开。
例如以下样例展示了怎样强制展开一个选项值:
ifconvertedNumber{
println("\(possibleNumber)
has an integer value of \(convertedNumber!)")}else {
println("\(possibleNumber)
could not be converted to an integer")}
须要强调的是。假设试图使用!来存取一个不存在的选项值会触发一个执行时错误。因此在使用!来存取选项值之前应该总是确保该选项值包括一个有效值。或者採用上面的方式进行推断。
Swift中你还可以使用选项绑定来推断一个选项是否包括一个有效值。
选项绑定作为if
或while语句的推断语句使用。在推断语句中先取出选项中的值并赋值给一个常量或变量,然后使用该常量或变量来检查和使用该选项中的值。
例如以下样例展示了怎样使用选项绑定来使用一个选项中的值。
ifletactualNumber
= possibleNumber.toInt() {println("\(possibleNumber)
has an integer value of \(actualNumber)")}else {
println("\(possibleNumber)
could not be converted to an integer")}
你能够通过为一个选项变量赋值为nil,来设置该选项变量为一个无值的状态:
var serverResponseCode: Int?
= 404
选项变量serverResponseCode 包括一个实际的整数值404.
serverResponseCode = nil
如今serverResponseCode不包括值。
假设你定义一个选项常量或变量,但没有为其提供默认值。该常量或变量自己主动被设置为nil。
nil在Objective-C是一个代表不存在对象的指针,而在Swift中它代表一个确定类型值的不存在。而且在Swift中随意类型
的选项都能够设置为nil,而不不过对象类型。
一个选项类型在首次设置时,假设为其设置了一个有效值,因为这时选项类型的值程序是清楚的,而且假设在此后使用该选项的每一个地方也可以确信该选项的值存在,这样的类型的选项就行定义为一个称为隐含的已展开的选项。
一个隐含的已展开的选项在使用时不再须要使用条件语句来检查以及使用强制展开或选项绑定来取出选项中的值。
你在选项类型的常量或变量后面放置一个‘!’符号标识来指示该选项是一个隐含的已展开的选项。
隐含的已展开的选项通常在类的初始化期间使用。
例如以下展示了怎样定义一个隐含的已展开的选项及怎样使用它:
letassumedString:String!
="An implicitly unwrapped optional string."println(assumedString)
// no exclamation mark is needed to access its value
当然须要注意的是假设试图存取一个不包括值的隐含的已展开的选项,仍然会触发一个执行时错误。
版权所有所有,转载请注明链接和出处转载时,谢谢!