Welcome to Swift (苹果官方Swift文档初译与注解十二)---77~83页(第二章)

Optionals (可选类型)

  当一个值可能有值,也可能没有值,这种情况你可以使用可选类型.可选类型的意思是:

  有个一个值,它等于x,或者,根本没有任何值.

  注意点:

  可选类型的概念在C和OC中都是没有的.在OC中最相似的情况是,一个方法返回nil或者返回一个对象.OC中返回nil意思是没有合法的对象.然而,这只能针对对象,不能用在结构体,基本  数据类型,或者枚举值.对于这些类型,OC的方法只能返回固定的某个值(比如NSNotFound)来提示没有某个值.这要去方法的调用者清楚的记得返回的固定值来进行测试和检查.在Swift  中,可选类型可以用于任何类型的值,不再需要固定的常量.

  例如,在Swift中String类型有一个叫做toInt的方法,它将一个String值转换成Int值,然而不是每个String类型值都可以转换成Int值.String类型的”123”可以被转换成Int类型的123,但  是String类型的”hello,world”却不能转成任何Int类型的值.

  下面的代码使用toInt方法试图将一个Sting类型转换为Int:

    let possibleNumber = "123"

    let convertedNumber = possibleNumber.toInt()

    // convertedNumber is inferred to be of type "Int?", or "optional Int”

  由于toInt方法可能失败,它返回一个可选类型Int而不是整型Int.可选类型Int写法是Int?,而不是Int.问号?表示它是可选类型值,这意味着,它可能有某些Int类型的值,或者它根本没有任何  值(它也不能包含其他别的类型值,比如布尔值或者String值,它要么是一个Int,要么什么都没有.)

If Statements and Forced Unwrapping (if语句和强制解包)

  可以使用if语句来确认可选类型是否有值.如果一个可选类型有值,它等价true,如果它没有值,等价false.

  一旦确定可选类型有值,可以通过在可选类型名的后面添加一个感叹号(!)来访问内部的值,感叹号的含义是:”我知道这个可选类型有一个值,请使用这个值”.这就是所谓可选类型值的  强制解包.

    if convertedNumber {

      println("\(possibleNumber) has an integer value of \(convertedNumber!)")

    } else {

      println("\(possibleNumber) could not be converted to an integer")

    }

    // prints "123 has an integer value of 123”

  关于更多的if语句,请参考流程控制(Control Flow).

  注意点:

  试图使用感叹号(!)访问一个没有值的可选类型将触发运行时的错误.在使用强制解包可选类型是,一定要确认它是有值的.

Optional Binding (可选绑定)

  使用可选绑定可以判断一个可选类型是否包含值,并会生成一个临时的常量或者变量保存这个值.可选绑定常常与if和while语句一起来检测可选类型包含的值.

  可以像下面的代码一样,使用可选绑定在if语句中:

    if let constantName = someOptional {

    statements

    }

  在下面的代码中,你也可以使用可选绑定来重写possibleNumber例子,而不使用强制解包:

    if let actualNumber = possibleNumber.toInt() {

     println("\(possibleNumber) has an integer value of \(actualNumber)")

    } else {

        println("\(possibleNumber) could not be converted to an integer")

    }

    // prints "123 has an integer value of 123”

  上面代码可以理解为:

  “如果possibleNumber.toInt返回的Int可选类型包含一个值,那么将这个值赋值给叫做actualNumber的常量”

  如果条件成立,在if语句的第一个分支语句中常量actualNumber就会有值,这个值正是包含在可选类型内的值,并且用它初始化了常量actualNumber.因此不再需要使用感叹号!后最来  访问这个值.在上面的代码样例中,actualNumber只是用来打印输出这个结果.

  可选绑定可以用常量也可以用变量.如果你想在if的第一个分支语句中操作actualNumber的值,你可以用if var actualNumber 来替代,这样包含在可选类型中的值,将会赋值给变量而不  是常量.

Welcome to Swift (苹果官方Swift文档初译与注解十二)---77~83页(第二章),布布扣,bubuko.com

时间: 2024-08-05 08:02:52

Welcome to Swift (苹果官方Swift文档初译与注解十二)---77~83页(第二章)的相关文章

Welcome to Swift (苹果官方Swift文档初译与注解十八)---116~122页(第二章)

Strings and Characters (字符串和字符) 字符串是一组字符组成的序列,例如“hello, world" 或 "albatross”.在Swift中,字符串使用String类型进行声明,它代表一组由Character(字符)类型组成的值的序列. String类型和Character类型提供了一种在代码中处理 (兼容Unicode) 文本的快速方式.字符串创建和管理的语法与C语言的相似,都属于轻量级并且可读性好.字符串的拼接只是简单的 使用加号(+)操作符,而且字符串

Welcome to Swift (苹果官方Swift文档初译与注解十九)---123~132页(第二章..本章节还剩6页)

Working with Characters (与字符相关) 在Swift中,String类型表示一组有序字符的值.每个字符都是一个Unicode符号.可以使用for-in循环来遍历字符串中的每个字符: for character in "Dog!??" {   println(character) } // D // o // g // ! // ?? 在Swift中也可以使用Character类型来显式的创建一个单字符的常量或者变量: let yenSign: Character

Welcome to Swift (苹果官方Swift文档初译与注解十四)---90~93页(第二章)

Debugging with Assertions (断言调试) 断言是一个假设逻辑条件为真的运行时检查机制.在执行任意代码之前,可以使用断言来确认一个基本的条件情况.如果条件判断为真,代码将继续执行,如果条件为假,代码将会结束,应 用程序也会退出. 如果在调试环境中,运行的代码触发了一个断言(比如你在Xcode中编译并运行一个应用),你可以明确的看到错误的状态发生在哪里,并且查询应用程序在这个时刻的状态.断言也可以让 你使用适合的调测显示信息作为断言信息. 可以写一个全局函数assert来触发

Welcome to Swift (苹果官方Swift文档初译与注解十)---63~69页(第二章)

如果你将整型与浮点型一起使用,结果将被认为是Double类型: et anotherPi = 3 + 0.14159 // anotherPi 的类型是Double 上述代码中,3的值是没有明确说明类型,因此,根据剩余部分的浮点类型可以确定返回值为Double. Numeric Literals (数值的进制表示) 整数类型可以进行如下表示: A decimal number, with no prefix         // 十进制数值,不需要前缀符号; A binary number, w

Welcome to Swift (苹果官方Swift文档初译与注解三十七)---261~265页(第六章-- 闭包)

Inferring Type From Context 上下文类型判断 因为排序的闭包是作为一个参数传递给函数,因此Swift可以判定这个参数的类型和根据sort函数第二个参数判断返回值的类型.这个参数的类型是(String, String) -> Bool,这意味着 String,String以及Bool类型都不需要在闭包定义的时候声明.因为所有的类型都可以由系统判定.因此,返回箭头以及参数名字的括号都可以省略: reversed = sort(names, { s1, s2 in retur

Welcome to Swift (苹果官方Swift文档初译与注解三十三)---235~240页(第五章-- 函数)

Default Parameter Values (参数默认值) 在定义函数的时候,你可以给任何参数定义一个默认的值,如果定义了默认值,在调用这个函数的时候,你可以忽略这个参数. 注意: 设置参数默认值的时候,需要按照函数的参数列表最后的开始,这可以确保在调用函数的时候,即使没默认值的参数也可以按顺序的对应上,也使得函数在调用的时候更加清晰. 下面的代码例子是join函数的新版本,它使用了默认参数: func join(string s1: String, toString s2: String

Welcome to Swift (苹果官方Swift文档初译与注解三十五)---248~253页(第五章-- 函数 完)

Function Types as Return Types (函数类型作为返回值类型) 一个函数的类型可以作为另一个函数的返回值类型.可以在一个函数的返回值箭头后面写上一个完整的函数类型. 例如: 下面的例子定义了两个简单的函数,分别为stepForward 和 stepBackward.其中stepForward函数返回值比它的输入值多1,stepBackward函数返回值比它输入值少1.这两个函数的 类型都是(Int) -> Int: func stepForward(input: Int

Welcome to Swift (苹果官方Swift文档初译与注解二十七)---189~198页(第四章-- 流程控制)

Switch 一个switch语句里包含一个值,并且用这个值与其他几个可能的匹配模式进行比较,然后根据成功匹配上的模式,执行相应的代码块.switch语句提供了比if语句更多的选项来相应多种潜 在的情况. 最简单的一个例子: switch some value to consider { case value 1:   respond to value 1 case value 2, value 3:   respond to value 2 or 3 default:   otherwise,

Welcome to Swift (苹果官方Swift文档初译与注解二十一)---140~147页(第三章--集合类型)

第三章 Collection Types (集合类型) 在Swift中,提供了两种集合类型用来存储一组值:数组和字典.数组有序的存储相同类型的值;字典存储无序的相同类型的值.字典可以通过唯一的标识(就是所说的键)来查询和访问. 在Swift中,数组和字典总是要清晰的标明他们存储数据的类型.这就意味着不可以将错误的类型插入到数组或字典中.同时也意味着你是明确了解你要遍历的数组或字典里面数据的类 型.在Swift中,集合要显式的声明类型来保证在开发中都会明确的知道它能处理的数据类型. 注意点: 在S