首页 > 代码库 > 苹果官方Swift文档翻译03

苹果官方Swift文档翻译03

上述代码中,如果可选值为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)

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