Swift Note|Where in the case

Swift 上課筆記,switch 後面加上 where 然後呢?究竟 case 會去哪裡?可以換個看得懂的方式寫嗎?

where 這個判斷,大家應該很常用到吧
我個人是比較常在 for 迴圈的時候插入這個 where 來增加進入迴圈的判斷條件

for item in items where item.id == 3 {
  print(item)
}

這段翻譯成中文就是:把 items 這個 Array 裡面的東西一個一個拿出來並且找到 item 裡面的 id 的值是 3 的那個,才進去印出來
當然我這舉例,好像沒什麼感覺

for student in students where student.name.hasPrefix("Ma") {
  print(item)
}

那換成這樣:從學生的陣列把每個學生都拿出來並且找到名字開頭是 “Ma” 的那個學生,然後印出來
所以名字前面不符合 Ma 的就不會被印出來,Ma 的 Max, Mary, May 都會被印出來喔

這裡還算可以理解,但最近我就是遇到一個寫法,我乍看有點無法理解,所以想說幫自己留個筆記

switch people {
  case .goodTeacher: break
  case let .goodStudent(name) where name.hasPrefix("Ma"):
      print(name)
  case .goodStudent:
       print("Opps!")
}

有兩個好學生的 case,那時候我看到腦子突然打劫,那到底好學生會去哪一個 case?
『記得 case 只會進去一次,那到底會選擇哪一個 case 進去』這樣的想法一直把自己侷限住…
最後請教了我的 Swift 明燈大師,他一句又點醒我夢中人

他就是一個判斷,名字有 “Ma” 是 true 的會進入這個 case
否則就是進入好學生的 Oops 的 case

其實這樣寫也等於是下面這樣的寫法

switch people {
    case .goodTeacher: break
    case let .goodStudent(name) :
        if name.hasPrefix("Ma") {
            print(name)
        } else {
            print("Oops!")
        }
    }

本來我是想說會不會在運算效果上有什麼差異,但看來我是為現在的手機多心了,
應該是沒什麼差別,可能就看各位團隊喜歡怎樣的寫法吧
還是大家有什麼不一樣的見解,或是我沒有想到的地方,也可以在下面留言跟我分享

關於作者

KK
KK

iOS Developer

文章: 5