What new in Swift 2

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 ကို ကြည့်သင့်ပါတယ်။

Download Playground Code

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Discover more from Saturngod

Subscribe now to keep reading and get access to the full archive.

Continue reading