WWDC 2015 မှာ swift 2 ကို Xcode 7 နှင့် အတူ မိတ်ဆက်ခဲ့ပါတယ်။ Swift 2 မှာ Swift 1.2 ကို အဆင့်မြှင့်တင်ထားပြီးတော့ keyword အသစ်တွေပါလာပါတယ်။
try/catch
iOS developer တွေ အနေနဲ့ try catch ကို သိပ်ပြီး ရင်းနှီးမှုမရှိလှဘူး။ Objective-C မှာလည်း try/catch မရှိတဲ့အတွက်ကြောင့် error handling အတွက် try/catch ကို မသုံးဖြစ်ခဲ့ပါဘူး။ သို့ပေမယ့် Java/C# သမားတွေ အနေနဲ့ try/catch က ထူးဆန်းတဲ့ အရာ မဟုတ်ပါဘူး။
ကျွန်တော်တို့အနေနဲ့ ကိုယ်ပိုင် Error exception တွေကို Swift 2 မှာ ကြေငြာနိုင်ပါတယ်။
enum MyError: ErrorType {
case UserError
case NetworkError
}
အဲဒါကတော့ ကျွန်တော်တို့ ကိုယ်ပိုင် exception ကို ErrorType နဲ့ ကြေငြာထားတာပါ။
func doFunction() throws -> String
doFunction ဆိုတဲ့ function က error throws လုပ်မယ်လို့ ဆိုထားပါတယ်။ code အပြည့်အစုံကို အောက်ကလို ရေးထားပါတယ်။
func doFunction() throws -> String {
print("Hello")
throw MyError.UserError
return "return Value"
}
အဲဒီ code မှာ UserError ကို ကျွန်တော်တို့တွေ thorws လုပ်ခဲ့ပါတယ်။ အဲဒီလို throws လုပ်ထားတာရှိရင် try/catch နဲ့ အသုံးပြုရပါတယ်။
do {
var res = try doFunction()
print ("SUCCESS")
} catch {
print("Some Error")
}
အဲဒီ code မှာ ဆိုရင်တော့ Hello ဆိုတာကို ထုတ်ပြမယ် ပြီးရင် thorw ဖြစ်သွားပြီးတော့ catch ထဲက Some Error ကို ထုတ်ပြပါမယ်။
ဘယ် Error ဆိုတာကို အတိအကျ သိရအောင်
do {
var res = try doFunction()
print ("SUCCESS")
} catch MyError.UserError {
print ("User Error")
} catch {
print ("Some Error")
}
ဒါဆိုရင် User Error catch ထဲကို ရောက်လာပါလိမ့်မယ်။
let
Swfit 1.2 မှာတုန်းက ကျွန်တော်တို့တွေ "Pyramid of doom" ကို ကြုံခဲ့ရပါတယ်။ ဥပမာ အောက်ကလို မျိုး code ပေါ့
if let a = b {
if let c = d {
if let e = f {
print("Working")
}
}
}
အခု Swift 2 မှာတော့ တိုတိုလေးနဲ့ ရေးလို့ရပါပြီ။
if let a = b , c = d , e = f {
print("Working")
}
guard
guard အကြောင်း မပြောခင်မှာ "Pyramid of doom" ကို ပြန်ပြောရပါအုံးမယ်။ ကျွန်တော်တို့တွေ data တွေ ရှိမရှိ ကို အောက်က code လိုမျိုး စစ်ကြပါတယ်။
if firstName != "" {
if lastName != "" {
if address != "" {
// do great code
}
}
}
အဲဒီ code ကို ပိုပြီး ရှင်းသွားအောင် codition မညီဘူးဆိုရင် return ပြန်လိုက်ပါတယ်။
if firstName == "" { return }
if lastName == "" { return }
if address == "" { return }
// do great code
အဲဒါကို early return လို့ ခေါ်ပါတယ်။ Swift 2 မှာတော့ အဲဒီလို early return တွေကို ရှင်းသွားအောင် guard
ကို အသုံးပြုနိုင်ပါတယ်။
guard age > 18 else {
return false
}
guard #available(iOS 9, *) else {
return
}
func printName() {
guard let unwrappedName = name else {
print("You need to provide a name.")
return
}
print(unwrappedName)
}
အဲဒီ code မှာဆိုရင် guard ကို အသုံးပြုထားတာကို ရှင်းရှင်းလင်းလင်း မြင်နိုင်ပါတယ်။ guard နဲ့ let ကို တွဲသုံးပြီးတော့ data မရှိခဲ့ဘူးဆိုရင် ကိစ္စတွေ ရေးလို့ရပါတယ်။
defer
defer ကတော့ code block ပြီးမှ အလုပ်လုပ်စေချင်ရင် defer ကို အသုံးပြုနိုင်ပါတယ်။
func myFunc() {
print("Step 2")
defer { print("Step 3") }
print("Step 4")
}
print("Step 1")
myFunc()
print("Step 5")
ဒီ code မှာဆိုရင်တော့ output က ဒီလို မျိုး ပြပါလိမ့်မယ်။
Step 1
Step 2
Step 4
Step 3
Step 5
defer ကို အသုံးပြုထားတဲ့အတွက် defer ထဲမှာ ရှိတဲ့ code က function ပြီးသွားမှ အလုပ်လုပ်ပါတယ်။
ကျွန်တော်တို့တွေ do နဲ့လည်း တွဲသုံးနိုင်ပါတယ်။
print("Step 1")
do {
defer { print("Step 2") }
print("Step 3")
print("Step 4")
}
print("Step 5")
အဲဒါဆိုရင်တော့ 1,3,4,2,5 ဆိုပြီး ထွက်လာပါမယ်။ Step 2 က do block ပြီးမှ အလုပ်လုပ်ပါတယ်။ နောက်ထပ် ဥပမာ ကို ကြည့်ရအောင်
for i in 1...10 {
print ("In \(i)")
defer { print ("Deferred \(i)") }
print ("Out \(i)")
}
အဲဒီမှာဆိုရင်တော့ In , Out , Deferred ဆိုပြီး အစီအစဉ် နဲ့ loop ပတ်တာကို တွေ့ရပါလိမ့်မယ်။
Checking API availablity
Swift 2 မှာတော့ iOS version ကို လွယ်လင့် တကူ စစ်နိုင်ပါပြီ။ #available ကို အသုံးပြုပြီးတော့ စစ်ဆေးနိုင်ပါတယ်။
if #available(iOS 9, *) {
// use UIStackView
} else {
// show sad face emoji
}
iOS 9 နှင့် အထက် ဆိုရင် UIStackView သုံးမယ်လို့ ဆိုထားပါတယ်။
guard #available(iOS 9, *) else {
return
}
@available ကို အသုံးပြုပြီးတော့ function တွေကို limit လုပ်ထားနိုင်ပါတယ်။
@available(iOS 7, *)
func iOS7Work() {
// do stuff
if #available(iOS 8, *) {
iOS8Work()
}
}
@available(iOS 8, *)
func iOS8Work() {
// do stuff
if #available(iOS 9, *) {
iOS9Work()
}
}
@available(iOS 9, *)
func iOS9Work() {
// do stuff
}
iOS 9 SDK မှသာ iOS9Work က အလုပ်လုပ်မှာ ဖြစ်ပြီးတော့ iOS 7,8 စတာတွေမှာ အဲဒီ function ကို ခေါ်လို့ မရပါဘူး။ SDK , library စတာတွေ ရေးတဲ့သူတွေ အတွက် အသုံးဝင်လှပါတယ်။
Protocol-Oriented Programming
Swift 2 ဟာ Protocol-Oriented Programming ပါ။ iOS ကို လေ့လာနေတယ် Swift 2 ကို လေ့လာမယ်ဆိုရင် အရင်ဆုံး Protocol-Oriented Programming in Swift ကို ကြည့်သင့်ပါတယ်။
Leave a Reply