iT邦幫忙

2025 iThome 鐵人賽

DAY 3
0
Mobile Development

從零開始學習 iOS系列 第 3

從零開始學習 iOS Day2 - Swift 函式與 Optional

  • 分享至 

  • xImage
  •  

昨天我們學了 Swift 的變數、常數、型別與控制流程。

今天要進一步認識 Swift 裡非常重要的三個觀念:

  1. 函式 (Function)
  2. Closure(閉包)
  3. Optional

這些觀念是 Swift 的核心,理解之後能讓程式碼更靈活,也更安全。

函式 (Function)

函式就像是程式裡的小工廠,能接收輸入、做運算,最後回傳結果。

這樣做的好處是程式碼更有結構,也能重複利用。

基本語法

func sayHello(name: String) -> String {
    return "Hello, \(name)!"
}

let message = sayHello(name: "Jack")
print(message) // Hello, Jack!

語法拆解:

  • func:用來定義函式
  • sayHello:函式名稱
  • (name: String):參數名稱與型別
  • -> String:回傳型別
  • return:回傳的結果

沒有回傳值的函式

func sayHello() {
    print("Hello World")
}

sayHello() // Hello World

簡化寫法

如果函式只有單行運算,可以省略 return

func square(of number: Int) -> Int {
    number * number
}

print(square(of: 4)) // 16

參數標籤

在前一項func square(of number: Int) 這裡的 of 其實是 參數標籤 (argument label)。主要的功用是外部呼叫函式時要用這個字。

如果不用外部參數名稱

如果你想呼叫的時候直接寫 square(4),可以這樣定義:

func square(_ number: Int) -> Int {
    return number * number
}

let result = square(4) // 不需要寫 of

這裡 _ 表示「忽略外部參數名稱」。

閉包(Closure)

在 Swift 裡,函式其實是一種特殊的閉包 (Closure)

閉包可以理解為「匿名函式」,它沒有名字,可以直接當成值來使用。

基本 Closure 語法

let greetClosure = { (name: String) -> String in
    return "Hello, \(name)!"
}

print(greetClosure("Alice")) // Hello, Alice!

與函式的差別

  • 函式:有名字,可以重複呼叫
  • 閉包:通常用來做短暫的邏輯,特別常見於回呼(callback)、排序、非同步程式

Optional

它表示「這個值可能存在,也可能是 nil」。

定義 Optional

var name: String? = "Alice"
print(name) // Optional("Alice")

name = nil
print(name) // nil

這裡的 String? 就代表「這是一個 Optional 型別,可能存放一個 String,也可能是 nil」。

拆解 Optional 的值

因為 Optional 有可能是 nil,所以在使用前必須「拆箱 (unwrap)」。

強制拆箱(不建議常用)

使用 ! 表示強制拆箱

var name: String? = "Alice"
print(name!) // Alice

但如果值是 nil,強制拆箱會 程式崩潰

var name: String? = nil
print(name!) //錯誤:Unexpectedly found nil

Nil-Coalescing Operator(提供預設值)

我們可以使用預設值的方式來安全取得資料。

var nickname: String? = nil
print(nickname ?? "Guest") // Guest

if let / guard let

除了上面兩種還有其他方式

if let 安全拆箱

var name: String? = "Alice"

if let unwrappedName = name {
    print("Name is \(unwrappedName)")
} else {
    print("Name is nil")
}

guard let 提前返回

常用在函式裡,避免巢狀 if 判斷

func printName(_ name: String?) {
    guard let unwrappedName = name else {
        print("Name is nil")
        return
    }
    print("Name is \(unwrappedName)")
}

結語

今天學到兩個 Swift 的重要概念:

  1. 函式 (Function):把程式邏輯打包成可重複使用的小單位
    • 有參數與回傳值
    • 可以省略回傳
  2. Optional:代表「值可能不存在」
    • ? 宣告
    • 必須先拆箱(if let、guard let、?? 預設值)才能安全使用

這兩個觀念會常常搭配出現,像是:函式的回傳值可能是 nil,這時候就需要 Optional 來處理。

掌握這些,就能寫出更安全、結構更清楚的 Swift 程式。


上一篇
從零開始學習 iOS Day1 - Swift 基礎語法
系列文
從零開始學習 iOS3
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言