Welcome to Swift (蘋果官方Swift文檔初譯與註解三)---11~18頁

來源:互聯網
上載者:User

標籤:c   style   a   color   int   get   

上述代碼中,如果可選值為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中,函數是一種基礎資料型別 (Elementary Data Type),這就意味著,一個函數,可以將另一個函數作為它的傳回值.

  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)

/**********後續有更新,敬請關注*********/ 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.