zoukankan      html  css  js  c++  java
  • 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!”

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

  • 相关阅读:
    IntelliJ IDEA 快捷键终极大全,速度收藏!
    49式!Python初级到高级招式都全了
    字节跳动三轮技术面_后端研发提前批
    这样让你的 IDEA 好用到飞起来!
    你 多久没有跳槽了?
    推荐几款能提升代码效率的笔记应用
    推荐 15 款编程游戏,从此谁都可以学编程!
    StackOverflow 创始人关于如何高效编程的清单
    11 条编程经验分享
    InnoDB和MyISAM存储引擎的区别
  • 原文地址:https://www.cnblogs.com/caios/p/3804898.html
Copyright © 2011-2022 走看看