zoukankan      html  css  js  c++  java
  • Welcome to Swift (苹果官方Swift文档初译与注解三)---11~18页

    上述代码中,如果可选值为nil,那么判断条件则为false,而且在{}中的代码将会被忽略,如果可选值不为nil,会将该值逐步运算后赋值给let后面的常量,其中逐步运算过程将依据实际的代码块.

    Switch 语法支持任何类型数据以及各种比较操作,并不局限在整型.

      let vegetable = "red pepper"

      switch vegetable {

      case "celery":

          let vegetableComment = "Add some raisins and make ants on a log."

      case "cucumber", "watercress":

          let vegetableComment = "That would make a good tea sandwich."

      case let x where x.hasSuffix("pepper"):

          let vegetableComment = "Is it a spicy (x)?"

      default:

          let vegetableComment = "Everything tastes good in soup."

      }

      EXPERIMENT //练习题

      Try removing the default case. What error do you get? // 尝试删除default 语句,看看或得到什么错误提示?

    Switch语法在执行完成匹配的代码之后会直接退出,不会再继续执行后面的case语句,因此不必在每个case语句后面明显的添加break来跳出switch.

    在for-in语法中,你可以通过键值对的形式访问字典中的每个条目(即遍历字典).

      let interestingNumbers = [

          "Prime": [2, 3, 5, 7, 11, 13],

          "Fibonacci": [1, 1, 2, 3, 5, 8],

          "Square": [1, 4, 9, 16, 25],

      ]

      var largest = 0

      for (kind, numbers) in interestingNumbers {

          for number in numbers {

              if number > largest {

                  largest = number

              }

          }

      }

      largest

      EXPERIMENT // 练习题

      Add another variable to keep track of which kind of number was the largest, as well as what that largest number was.  // 试着添加另一个变量来追踪largest的类型,同时也看看largest的值是多少.

    在Swift中,使用while可以根据条件来执行一段代码体,直到条件出现某种变化.循环的条件可以放在最后,这样可以确保循环至少被执行一次.

      var n = 2

      while n < 100 {

          n = n * 2

      }

      n

      var m = 2

      do {

          m = m * 2

      } while m < 100

      m

    在循环中,可以使用..来指定一个索引的范围(用在初始化,条件和增量)下面代码的两个循环是同样的效果:

      var firstForLoop = 0

      for i in 0..3 {

          firstForLoop += i

      }

      firstForLoop

     

      var secondForLoop = 0

      for var i = 0; i < 3; ++i {

          secondForLoop += 1

      }

      secondForLoop

    使用..确定范围,会忽略上一个值(就是范围的初始值),如果使用...确定范围,就要包含两个值(初始值和终止值).

    Functions and Closures  

    /*函数以及组合体*/

    在Swift中,使用func 来声明一个函数;调用函数时,只需在函数名字后面跟上(),在()内添加参数列表.使用箭头(->)来分隔参数名称和函数的返回值类型.

      func greet(name: String, day: String) -> String {    //定义函数greet,参数为字符串型的name和day,返回值为字符串

          return "Hello (name), today is (day)."

      }

      greet("Bob", "Tuesday")      //调用greet函数

         

      EXPERIMENT  // 练习题

      Remove the day parameter. Add a parameter to include today’s lunch special in the greeting. // 删掉day这个参数,添加一个参数(包含today’s lunch)到greet函数中指定的位置 

    通过组合可以从一个函数返回多个值:

      func getGasPrices() -> (Double, Double, Double) {

          return (3.59, 3.69, 3.79)

      }

      getGasPrices()

    函数也可以通过数组的形式来接收多个参数:

      func sumOf(numbers: Int...) -> Int {                  /**定义函数sumof(),参数为numbers数组*/

          var sum = 0                  /**定义变量sum 并赋值为0*/

          for number in numbers {  /**for循环,遍历numbers数组*/

              sum += number   /**求和*/

          }

          return sum   /**返回sum*/

      }

      sumOf()   /**调用函数sumof(),不传递参数*/

      sumOf(42, 597, 12)   /**调用函数sumof(),传递三个参数*/

      EXPERIMENT // 练习题

      Write a function that calculates the average of its arguments. // 编写一个函数,计算它参数的平均值

    函数可以嵌套,嵌套在内层的函数,可以访问它外层函数声明的变量;在一个复杂或者冗长的函数中,可以使用嵌套的函数来组织架构.

      func returnFifteen() -> Int {       /**定义函数returnFifteen()*/

          var y = 10                              /**定义变量y,赋值10*/

          func add() {                             /**定义函数add()*/

              y += 5           

          }

          add()                                     /**调用函数add()*/

          return y                               /**返回y值*/

      }

      returnFifteen()                          /**调用函数returnFifteen()*/

    在Swift中,函数是一种基本数据类型,这就意味着,一个函数,可以将另一个函数作为它的返回值.

      func makeIncrementer() -> (Int -> Int) {     /**定义函数makeIncrementer,参数空,返回值为(int->int)*/

          func addOne(number: Int) -> Int {           /**定义函数addOne(),参数为number,返回值类型为int*/

              return 1 + number      

          }

          return addOne               /**将函数addOne作为返回值,返回*/

      }

      var increment = makeIncrementer()              

      increment(7)                                                

    在Swift中,一个函数也可以接收另一个函数来当做它的参数.

      func hasAnyMatches(list: Int[], condition: Int -> Bool) -> Bool {

          for item in list {

              if condition(item) {

                  return true

              }

          }

          return false

      }

      func lessThanTen(number: Int) -> Bool {

         return number < 10

      }

      var numbers = [20, 19, 7, 12]

      hasAnyMatches(numbers, lessThanTen)

    /**********后续有更新,敬请关注*********/ 

  • 相关阅读:
    flash处理安全策略
    flash builder 命令行创建 AsDoc
    如何永久关闭选项"Tools > Close Other Forms"
    Oracle EBS Reports 日期格式 与 客户端日期格式(控制面板 > 区域和语言选项)
    ora00600 Metalink ID: 752428.1
    如何修改台EBS的用户密码
    dbms_utility.format_error_backtrace() 返回错误行
    SQL*PLUS命令的使用大全
    APPPER50022 (system administrator > profile > system . HR:User Type)
    客户端连接数据时会报“ORA12537:TNS连接已关闭”
  • 原文地址:https://www.cnblogs.com/caios/p/3773680.html
Copyright © 2011-2022 走看看