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)

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

Welcome to Swift (苹果官方Swift文档初译与注解三)---11~18页,布布扣,bubuko.com

时间: 2024-10-11 21:29:02

Welcome to Swift (苹果官方Swift文档初译与注解三)---11~18页的相关文章

Welcome to Swift (苹果官方Swift文档初译与注解三十五)---248~253页(第五章-- 函数 完)

Function Types as Return Types (函数类型作为返回值类型) 一个函数的类型可以作为另一个函数的返回值类型.可以在一个函数的返回值箭头后面写上一个完整的函数类型. 例如: 下面的例子定义了两个简单的函数,分别为stepForward 和 stepBackward.其中stepForward函数返回值比它的输入值多1,stepBackward函数返回值比它输入值少1.这两个函数的 类型都是(Int) -> Int: func stepForward(input: Int

Welcome to Swift (苹果官方Swift文档初译与注解十一)---70~76页(第二章)

Type Aliases (类型别名) 类型别名是个已经存在的类型定义另一个名字.定义类型别名的时候,使用关键字typealias. 当你想要使用名字来引用一个已经存在的类型时,类型别名将非常有效,并且更适合代码的上下文理解.例如,当要处理指定大小的一个数据时: typealias AudioSample = UInt16 一旦定义了一个类型别名,就可以在任何地方来代替原来的类型名: var maxAmplitudeFound = AudioSample.min // maxAmplitudeF

Welcome to Swift (苹果官方Swift文档初译与注解十)---63~69页(第二章)

如果你将整型与浮点型一起使用,结果将被认为是Double类型: et anotherPi = 3 + 0.14159 // anotherPi 的类型是Double 上述代码中,3的值是没有明确说明类型,因此,根据剩余部分的浮点类型可以确定返回值为Double. Numeric Literals (数值的进制表示) 整数类型可以进行如下表示: A decimal number, with no prefix         // 十进制数值,不需要前缀符号; A binary number, w

Welcome to Swift (苹果官方Swift文档初译与注解三十七)---261~265页(第六章-- 闭包)

Inferring Type From Context 上下文类型判断 因为排序的闭包是作为一个参数传递给函数,因此Swift可以判定这个参数的类型和根据sort函数第二个参数判断返回值的类型.这个参数的类型是(String, String) -> Bool,这意味着 String,String以及Bool类型都不需要在闭包定义的时候声明.因为所有的类型都可以由系统判定.因此,返回箭头以及参数名字的括号都可以省略: reversed = sort(names, { s1, s2 in retur

Welcome to Swift (苹果官方Swift文档初译与注解三十三)---235~240页(第五章-- 函数)

Default Parameter Values (参数默认值) 在定义函数的时候,你可以给任何参数定义一个默认的值,如果定义了默认值,在调用这个函数的时候,你可以忽略这个参数. 注意: 设置参数默认值的时候,需要按照函数的参数列表最后的开始,这可以确保在调用函数的时候,即使没默认值的参数也可以按顺序的对应上,也使得函数在调用的时候更加清晰. 下面的代码例子是join函数的新版本,它使用了默认参数: func join(string s1: String, toString s2: String

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

Welcome to Swift (苹果官方Swift文档初译与注解三十)---225~230页(第五章-- 函数)

Functions (函数) 函数是一个执行特定任务的代码段.通过名称来标识和调用它们. 在Swift中,每个函数都有类型,包括函数的参数类型和返回值类型.这些类型与Swift中的其他类型使用起来一样,这使得函数可以作为参数传递给另一个函数,以及可以从一个函数中返 回函数,一个函数也可以写在另一个函数内部,这样可以更有效的封装和嵌套. Defining and Calling Functions (定义和调用函数) 当你在定义函数的时候,你可以选择性的命名一个或者多个参数类型值,以及函数执行后的

Welcome to Swift (苹果官方Swift文档初译与注解三十)---219~224页(第四章-- 流程控制 完)

Labeled Statements  (标签语句) 循环或者switch语句可以嵌套其他的循环或者switch,这样在Swift中可以创建复杂的流程控制结构.循环或者switch语句都可以通过break语句来永久的结束,因此,有时候需要显式的 表明在循环或者switch中你需要break的语句.同样的,如果你嵌套多个循环,显式的表明里面的continue语句也是类似的. 为了达成这个目标,可以在循环语句或者switch语句中使用一个语句标签(statement label),利用这个标签和br

Welcome to Swift (苹果官方Swift文档初译与注解三十四)---241~247页(第五章-- 函数)

In-Out Parameters (全局参数) 像前面描述的参数变量,只能在函数体内进行修改,如果你需要函数修改的它的参数值,并且希望这些改变在函数调用结束后仍然有效,可以定义使用全局参数. 定义全局参数使用关键字inout,全局参数的值在函数调用的时候进行传递,在函数体内进行修改,最后函数回传新值来替换之前的值. 全局参数在函数中,只能使用变量来当作参数,不能使用常量或者文本值作为参数.因为常量或者文本值不可以被修改.为了表明参数变量可以被修改,要在变量名的前面直接添加一个& 符号. 注意