您的位置:首页 > 移动开发 > Swift

苹果官方Swift文档翻译03

2014-06-07 21:56 260 查看

转自:/article/5917287.html

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)

/**********后续有更新,敬请关注*********/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐