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

Range Operators (范围操作符)

  在Swift中包含两种范围操作符,它们都是一个数值范围表达式的一种缩写方式.

Closed Range Operator (闭区间范围操作符)

  闭区间范围操作符(a...b)定义声明了一个从a到b之间的范围,并且包括a和b.

  闭区间操作符通常用在迭代查询一个范围内所有的值,例如for-in循环:

    for index in 1...5 {

     println("\(index) times 5 is \(index * 5)")

    }

    // 1 times 5 is 5

    // 2 times 5 is 10

    // 3 times 5 is 15

    // 4 times 5 is 20

    // 5 times 5 is 25

Half-Closed Range Operator (半闭范围操作符)

  半闭范围操作符(a..b)定义声明了一个范围从a到b,但是不包括b的值.也就是说,半闭范围操作符包含范围的第一个值a,但是不包含最后的值b.

  半闭范围操作符在处理以零开始的列表(例如数值)时候特别有用,它可以用来一直计算到列表的长度(但不超过长度值):

    let names = ["Anna", "Alex", "Brian", "Jack"]

    let count = names.count

    for i in 0..count {

      println("Person \(i + 1) is called \(names[i])")

    }

    // Person 1 is called Anna

    // Person 2 is called Alex

    // Person 3 is called Brian

    // Person 4 is called Jack

  注意代码中,数值包含四个元素,但是 0..count只会最大到3(数值元素的最大索引),都是因为半闭范围操作.

Logical Operators (逻辑操作符)

  逻辑操作符修改或者组合布尔类型的值true和false.

  Swift支持C语言中的三种基本的逻辑操作符:

    • Logical NOT (!a)          // 逻辑非  
    • Logical AND (a && b)  // 逻辑与  
    • Logical OR (a || b)       // 逻辑或  

Logical NOT Operator (逻辑非)

  逻辑非操作符(!a)反转布尔类型的值 ,将true变成false,或将false变成true.

  逻辑操作符是一个前缀操作符,写在操作值的前面,没有任何空格.可以理解它为”不是...”,参考下面的代码例子:

    let allowedEntry = false

    if !allowedEntry {

    println("ACCESS DENIED")

    }

    // prints "ACCESS DENIED”

  语句 if !allowedEntry 可以被理解为” if not allowed entry.( 如果不允许进入)”.如果条件成立,后面的语句才会执行,也就是说,allowedEntry 的值是false.

  在这个代码例子里,请注意选择使用布尔类型常量和变量的名称,这样有助于代码的可读性和准确,避免使用双重否定或者令人迷惑的逻辑句子.

Logical AND Operator (逻辑与)

  逻辑与操作符(a && b)创建一个逻辑表达式,只有当每个表达式的值都为true的时候,整个表达式的值才会是true.

  如果逻辑与中任何一个值为false,那么整个表达式的值就是false.实际上,如果逻辑与的第一个值是false,那么第二个表达式将不会被计算执行,因为它不可能使整个表达式的值为true.  这就是短路诊断(short-circuit evaluation:笔者根据自己理解翻译此专业名词术语,可能会与其他资料有所差异)

  下面的例子中,判断两个布尔类型的值,只有两个值都为true的时候,才允许访问:

    let enteredDoorCode = true

    let passedRetinaScan = false

    if enteredDoorCode && passedRetinaScan {

     println("Welcome!")

    } else {

     println("ACCESS DENIED")

    }

    // prints "ACCESS DENIED”

Logical OR Operator (逻辑或)

  逻辑或操作符(a || b)是一个中缀操作,使用||表示.使用它建立的逻辑表达式:只要两个值里有一个值为true,那么整个表达式的值也是true.

  与逻辑与相似,逻辑或使用短路诊断来确认表达式的值.如果逻辑或左边的表达式值为true,那么右边的表达式不会参与运算,因为它不可能改变整个表达式的结果.

  在下面的代码例子中,第一个布尔值 (hasDoorKey)为false,但是第二个值(knowsOverridePassword) 为true,由于只要一个值为true,整个表达式的值就为true,所以访问是可以的:

    let hasDoorKey = false

    let knowsOverridePassword = true

    if hasDoorKey || knowsOverridePassword {

     println("Welcome!")

    } else {

        println("ACCESS DENIED")

    }

    // prints "Welcome!”

Combining Logical Operators (复合逻辑操作符)

  你可以使用复合逻辑操作符来创建一个长的复杂的逻辑表达式:

    if enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword {

     println("Welcome!")

    } else {

       println("ACCESS DENIED")

    }

    // prints "Welcome!”

  在这个例子中,使用了多个 && 和 || 操作符来建立一个长的复杂表达式.然而&& 和 ||  操作符仍然只处理两个值,因此实际上它可以理解为是将三个小的表达式组合在一起:

  如果进入正确的门号(enteredDoorCode),并且通过了视网膜扫描(passedRetinaScan),或者如果有门钥匙 (hasDoorKey),再或者知道紧急通道的密码(knowsOverridePassword),那  么可以通行.

  根据enteredDoorCode, passedRetinaScan和 hasDoorKey的值,可以知道前面两个表达式的结果是false,但紧急通道密码是知道的(knowsOverridePassword = true),因此整个表达  式的值是true.

Explicit Parentheses (清晰的括号限定)

  有时候,使用括号()来包住表达式这样可以使复杂的表达式更具有可读性(尽管这个限定在Swift中没有强制要求).在上面的代码中,可以添加括号()使复合的表达式更加明晰:

    if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword {

        println("Welcome!")

    } else {

        println("ACCESS DENIED")

    }

    // prints "Welcome!”

  括号使得前面两个值更加明确,在整个表达式中尽可能的分隔开,却并不影响整个表达式的值,又使得整个表达式更容易阅读.在代码中,可读性总是要高于简洁性.

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

时间: 2024-10-10 16:33:32

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

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

Type Aliases (类型别名) 类型别名是个已经存在的类型定义另一个名字.定义类型别名的时候,使用关键字typealias. 当你想要使用名字来引用一个已经存在的类型时,类型别名将非常有效,并且更适合代码的上下文理解.例如,当要处理指定大小的一个数据时: typealias AudioSample = UInt16 一旦定义了一个类型别名,就可以在任何地方来代替原来的类型名: var maxAmplitudeFound = AudioSample.min // maxAmplitudeF

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文档初译与注解三)---11~18页

上述代码中,如果可选值为nil,那么判断条件则为false,而且在{}中的代码将会被忽略,如果可选值不为nil,会将该值逐步运算后赋值给let后面的常量,其中逐步运算过程将依据实际的代码块. Switch 语法支持任何类型数据以及各种比较操作,并不局限在整型. let vegetable = "red pepper" switch vegetable { case "celery": let vegetableComment = "Add some rai

Welcome to Swift (苹果官方Swift文档初译与注解五)---29~34页

在Swift中,类的成员变量(属性)如果不需要计算,但又想在给它赋一个新值之前(或者之后)执行一段代码,可以使用willSet 和 didSet来处理.例如下面的代码样例,三角形(triangle)的边长总是与四边形(square)的边长相同. class TriangleAndSquare {   var triangle: EquilateralTriangle {   willSet {     square.sideLength = newValue.sideLength   } } v

Welcome to Swift (苹果官方Swift文档初译与注解四)---19~28页

在Swift中,函数实际上是一种特殊的组合体(闭包),你也可以定义匿名的组合体(闭包),将代码写在({})中,并使用in 来分隔参数和返回值. numbers.map({ (number: Int) -> Int in let result = 3 * number     return result     }) EXPERIMENT // 练习题 Rewrite the closure to return zero for all odd numbers. // 重写编写一个组合体,返回值为

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

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