七天學會 swift - 基礎篇 Day1


大綱

  • 宣告、資料型態與型態轉換
  • 流程控制
  • 陣列、集合與字典

宣告、資料型態與型態轉換

宣告

在swift中,使用 var 宣告變數, let 宣告常數

let 「常數名稱」 : 「型態」 = 「值」
var 「變數名稱」 : 「型態」 = 「值」

let str : Int = 10   //宣告 str 為 整數 10 的常數

變數或常數在宣告的時候可以省略資料型態,其型態由等號右邊的值決定

let n = 10.25   //宣告 n 為 浮點數 10.25 的常數

型態轉換

Swift屬於強型別(strongly typed)語言,代表運算式中各個變數或常數的資料型態必須一致,例如運算式 n=x ,如果 n 的型態是 Int32 而 x 的型態是 Int ,此時就必須把 n 與 x 調整成一致的資料型態才行

let n = Int("10")   //字串轉整數
let s = String(20)  //數字轉字串
let n32 = Int32(10) //Int 轉 Int32
let m = Int(1.2376) //小數轉整數
let f = Float(10)   //整數轉浮點數

Any

Any 表示任何型態。如果我們想要一個可以放任何型態的陣列,可以宣告如下:

var list : [Any] = []

list.append("hello")        //字串
list.append(10)             //整數
list.append(20.3)           //浮點數
list.append([ "KEY" : 5 ])  //字典

取出資料時需要先轉型為正確型態 (使用 as! 指令) 才能後續處理,
例如 list[3] 這筆資料

print((list[3] as! [String : Int])["KEY"]!)
// 印出 5

流程控制

迴圈

  • For-In

    For-In 迴圈可重複取得陣列中每個元素,數字範圍或是字串中的每個字元,例如:

    //陣列
    for city in ["台北","台中","高雄"] {
        print(city)
    }
    
    //數字範圍
    for n in 0...10 {
        print(n)
    }
    
    //字串
    for c in "hello world" {
        print(c)
    }
    

    在數字範圍的例子中,「 0...10 」代表包含0也包含10,若為「 0..<10 」則表示包含 0 但不包含 10。如果迴圈範圍為「 0...10 」但一次增加 2 ,就必須加上 where 條件,語法為:

    for n in 0...10 where n % 2 == 0 {
        print(n)     // 0 2 4 6 8 10
    }
    

    若要由大到小,就要藉助 reverse() 了,例如我們想要從 10 到 0,每次遞減 2,如下:

    for n in (0...10).reversed() where n % 2 == 0 {
        print(n)     // 10 8 6 4 2 0
    }
    
  • While

    如果判斷式成立,則進入迴圈

      var n = 0
      while n < 10 {
          print(n)
          n = n + 1
      }
      // 0 1 2 3 4 5 6 7 8 9
    
  • Repeat-While

    此迴圈跟 while 迴圈類似,不過 Repeat-While 迴圈是先執行迴圈一次再判斷是否要繼續

      var n = o
      repeat {
          print(n)
          n = n + 1
      } while n < 10 
      // 0 1 2 3 4 5 6 7 8 9
    
  • continue 與 break 語句

    continute 可以立即讓程式跳到下一檢查迴圈是否要執行的位置
    break 則可以立刻結束迴圈

      for i in 1...5 {
          if i == 3 {
              continue
          }
          print(i)
      }
      // 印出 1 2 4 5
    
      for i in 1...5 {
          if i == 3 {
              break
          }
          print(i)
      }
      // 印出 1 2
    

判斷式

  • if-else
      if a == 10 {
          // a 等於 10
      } else if a == 20 {
          // a 等於 20
      } else {
          // a 不等於 10 也不等於 20
      }
    
  • switch-case

      let n = 10 
    
      switch n {
      case 0...2:
          // n 的範圍在 0 與 2 間
          break
    
      case 3...5:
          // n 的範圍在 3 與 5 間
          break
    
      default:
          // 其他
          break
      }
    

陣列、集合與字典

陣列

  • 一維陣列
    首先先宣告一個 字串陣列 並初始化為空陣列
    var cities = [String]
    
    此陣列為空陣列,若要增加陣列元素,可以使用 append()函數來增加
    cities.append("台北")
    cities.append("台中")
    cities.append("高雄")
    
    若要印出或修改內容,方式如下:
    print(cities[1])   //台中
    cities[2] = "花蓮"  //將 高雄 改成 花蓮
    
    陣列也可以在初始化的時候將值填入陣列中
    let school = ["國小","國中","高中"]
    
    若要宣告一個大型陣列,可以使用 Array 來完成
    var x = Array(repeating : 0, count : 100)
    //產生一個具有 100 個元素的陣列,並且全部初始化為 0
    
  • 二維陣列
    宣告方式
    var nums = [[Int]]
    
    新增方式
    nums.append([1,2,3])
    nums.append([4,5,6,7,8,9])
    
    此時陣列裡包含了 [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 , 7 , 8 , 9 ] ]
    print(nums[0][1]) //印出 2
    print(nums[1][3]) //印出 7
    

集合

集合型態是用來儲存不強調索引值或鍵值的資料。宣告方式類似陣列,
但需指定型態為 Set

var zoo : Set = ["斑馬","獅子","長頸鹿"]

雖然類似於陣列,但是如果使用 zoo[1] 是錯誤的,因為集合沒有索引值。
我們只能用 contains() 去判斷某個資料是否在集合中

if zoo.contains("獅子") {
    print("動物園中有獅子")
}

要將資料加進集合中,可以使用 insert()

zoo.insert("眼鏡猴")

如果插入一個集合中已存在的元素,集合內容不會發生改變。
因為集合中的元素只會維持 單一元素

if zoo.insert("斑馬").inserted {
    print("成功")
}else {
    print("失敗")   //因集合中已存在 "斑馬" ,固集合內容不會發生改變
}

字典

字典相當於是「 自訂索引值 」的陣列。例如:透過字典來紀錄 Eric 這個人的相關屬性

var Eric : [String : Any] = {
    "髮色" : "黑色" ,
    "身高" : 174 ,
    "體重" : 73 
}

如果要取得 Eric 的身高,方式如下:

print(Eric["身高"]) //175

若要修改 Eric 的體重,方式跟陣列一樣

Eric["體重"] = 60

也可以直接增加屬性

Eric["性別"] = "男"

若要刪除某個 Key,使用 removeValue() 即可

Eric.removeValue(forKey : "髮色")

結尾

本篇為基礎篇介紹,第二篇開始會介紹如何開發第一支程式!

#swift #iOS







你可能感興趣的文章

Fetch 與 Promise (五):async 與 await

Fetch 與 Promise (五):async 與 await

React Hooks - Day7

React Hooks - Day7

工程師有兩種:做完跟做好的分別

工程師有兩種:做完跟做好的分別






留言討論