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

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!”

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