iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0
Mobile Development

swift 30天之旅系列 第 13

第十三天:Swift 進階 - 模式匹配

  • 分享至 

  • xImage
  •  

模式匹配是Swift語言中的一個強大特性,它允許我們以簡單、直觀的方式檢查並解構數據。它通常與switch語句和其他控制流結構一起使用,為我們提供了一種更清晰、更具可讀性的方法來處理多種情況。

什麼是模式匹配?

模式匹配可以視為一種進階的的條件語句,允許我們根據數據的形狀、類型或值進行操作。這不僅僅是基於值的比較,它可以是基於數據結構的形狀,如元組、枚舉、或者是特定的數據類型。

基本模式匹配

Swift的switch語句非常適合進行模式匹配。考慮以下例子:

let someValue = (2, 3)

switch someValue {
case (0, 0):
    print("It's the origin!")
case (_, 0):
    print("On the x-axis.")
case (0, _):
    print("On the y-axis.")
case (let x, let y) where x == y:
    print("Along the y=x line.")
default:
    print("Somewhere else.")
}

在上述例子中,我們使用了多種模式:

  • 我們匹配了具體的點(0, 0)
  • 使用_符號匹配了任何y或x坐標。
  • 使用where子句添加了額外的條件。

使用模式匹配與枚舉

模式匹配與枚舉一起工作尤其有力:

enum WeatherCondition {
    case sunny, cloudy(coverage: Int), rainy(chance: Int)
}

let today = WeatherCondition.cloudy(coverage: 70)

switch today {
case .sunny:
    print("It's a clear day!")
case .cloudy(let coverage) where coverage < 50:
    print("It's partly cloudy.")
case .cloudy(let coverage):
    print("It's \(coverage)% cloudy.")
case .rainy(let chance) where chance > 70:
    print("There's a high chance of rain.")
default:
    print("Unpredictable weather!")
}

這裡,我們不僅匹配了枚舉的案例,還解構了與每個案例相關的值,並基於這些值提供了不同的輸出。

使用for-in與模式匹配

for-in循環也可以與模式匹配一起使用,允許我們更精確地迭代特定的元素:

let mixedArray: [Any] = [1, "two", 3, "four"]

for item in mixedArray {
    switch item {
    case let i as Int:
        print("Integer: \(i)")
    case let s as String:
        print("String: \(s)")
    default:
        print("Other")
    }
}

總結

模式匹配提供了一種強大、靈活的方式來解構和檢查數據。它增強了Swift的switch語句,使其成為一個強大的工具,遠遠超越了其他語言中的傳統用途。通過結合模式匹配和Swift的其他特性,我們可以撰寫更乾淨、更可讀的程式碼,更有效地處理各種情況。


上一篇
第十二天:Swift進階 - 泛型
下一篇
第十四天:Swift進階 - 錯誤處理
系列文
swift 30天之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言