skip to content
Logo Saturngod

where in Swift

/ 2 min read

Swift မှာ where ကို နောက်ပိုင်း အသုံးဖြစ်လာတယ်။ တချို့ case လေးတွေမှာ where က အသုံးဝင်တယ်။

Switch

Where မပါပဲ ရေးမယ် ဆိုရင်

func calculateSize(type: PageType, page: Int) -> Int {
if type == .Category {
return defaultPageSize + 1
}
else if type == .Detail {
if page == 1 {
return defaultPageSize
}
else {
return defaultDetailSize
}
}
}

အဲဒီ code ကို where သုံးလိုက်ရင်

func calculateSize(type: PageType, page: Int) -> Int {
switch type {
case .Category:
return defaultPageSize + 1
case .Detail where page == 1:
return defaultPageSize
default:
return defaultDetailSize
}
}

Loop

where ကို loop နဲ့ လည်း သုံးနိုင်ပါတယ်။ where ကြောင့် filter မသုံး ပဲ loop မှာ filter လုပ်သွားလို့ရပါတယ်။

where မပါပဲ နဲ့ ရေးရင်

for number in categories {
if number != 0 {
print("\(number)")
}
}

where နဲ့ တွဲသုံးရင်

for number in categories where number != 0 {
print("\(number)")
}

နောက်ထပ် ဥပမာ အနေနနဲ့

let numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for number in numbers where number % 2 == 0 {
print(number)
}

Generic

where ကို generic တွေမှာလည်း အသုံးပြုနိုင်ပါတယ်။

Element က Int ပဲ ဖြစ်ရမယ် ဆိုသည့် သဘော။

extension Array where Element == Int {
func printAverageAge() {
let total = reduce(0, +)
let average = total / count
print("Average age is \(average)")
}
}
let ages = [44, 30, 33, 18, 23]
ages.printAverageAge()

Element က ၂ ခု က တူရမယ်။ နောက်ပြီး Equatable လည်း လုပ်လို့ရရမယ် ဆိုပြီး စစ်ထားသည့် သဘောမျိုးဆိုရင် အောက်ပါ အတိုင်းရေးနိုင်ပါတယ်။

func allItemsMatch<C1: Container, C2: Container>(_ container1: C1, _ container2: C2) -> Bool where C1.Item == C2.Item, C1.Item: Equatable {
// Implementation here...
// Check if items in container1 match items in container2
// ...
return true // or false
}