What’s New in Swift 4

Xcode 9 နဲ့ အတူ Swift 4 ထွက်လာပါပြီ။ Swift 4 beta က တော့ ထွက်နေတာ အနည်းငယ်တော့ ကြာပါပြီ။ Xcode 9 မှာတော့ Swift 4 ကို တိုက်ရိုက် ရေးလို့ ရပါပြီ။ ပါလာတာတွေကတော့ အများကြီး ဖြစ်သည့် အတွက်ကြောင့် ကျွန်တော် သဘောကြတာလေးတွေကို အဓိက ထားပြီး ရေးသွားပါမယ်။

Supporting Swift 3

Swift 4 ထွက်တော့မယ်ဆိုတုန်းက အစက တော်တော်လေး စိုးရိမ်မိတယ်။ Swift 3 ထွက်တုန်းက Swift 2 က အလုပ်မလုပ်တော့ဘူး။ Swift 2 တုန်းကလည်း Swift 1 အလုပ် မလုပ်တော့ဘူး။ သို့ပေမယ့် Swift 4 ကတော့ Swift 3.2 ကို အထောက်အပံ့ ပေးထားပါတယ်။

What New in Swift 4 Playground

Swift 4 မှာ ဘာတွေ ပါလာသလဲ ဆိုတာကို Ole Begemann က github မှာ playground file လေး လုပ်ထားပေးပါတယ်။ တိုက်ရိုက် ဖွင့်ပြီး run လိုက်ရုံပါပဲ။ သို့ပေမယ့် Xcode 9 တော့ လိုလိမ့်မယ်။

Multiline

Swift 3 မှာက multiline အတွက် \n ကို သုံးပြီးတော့ variable ကို + လုပ်ပြီး ရေးရတယ်။ အခု swift 4 မှာ ရိုးရှင်းလွယ်ကူစွာ ရေးနိုင်ပါပြီ။ line breaking အတွက် \n မလိုတော့ပါဘူး။

let multilineString = """
    This is a multi-line string.
    You don't have to escape "quotes" in here.
    The position of the closing delimiter
      controls whitespace stripping.
    """
print(multilineString)

Unicode 9

Swift 3 မှာ emoji ကို count လုပ်ရင် 2 လို့ ရပါတယ်။ swift 4 မှာတော့ 1 လို့ပဲ ပြပါပြီ။ ဒါ့အပြင် unicode တော်တော်များများရဲ့ string count ကိုလည်း ပြင်ထားပါတယ်။

//swift 3
var str = "?‍?‍?‍?"
print(str.characters.count) //4

?‍?‍?‍? ဆိုသည့် emoji ဟာ

  • ?\u200D
  • ?\u200D
  • ?\u200D
  • ?

ဖြစ်ပါတယ်။ ဒါကြောင့် ၄ ဆိုပြီး ထွက်လာပါတယ်။ Swift 4 မှာတော့ ၁ လို့ပဲ ရပါမယ်။

//swift 4
var str = "?‍?‍?‍?"
print(str.count) //1

Unicode 9 မှာ emoji တွေ ပေါင်းထားတာ ပါဝင်သလို emoji နဲ့ skin tone ပေါင်းထားတာတွေပါပါတယ်။ swift 4 မှာတော့ emoji+skin tone ပေါင်းထားရင်လည်း 1 လို့ ပဲ ရပါမယ်။

Private declarations visible in same-file extensions

Swift 3 မှာ က private ဖြစ်နေရင် extension လုပ်ထားပေမယ့် သုံးမရပါဘူး။ fileprivate လုပ်ထားမှသာ ရပါလိမ့်မယ်။

struct Example {
    private var file = "Hello"
}

extension Example {
    func world() {
        print(file)
    }
}

Swift 4 မှာတော့ extension တွေက private ကို ခေါ်လို့ရပါပြီ။

Codable

ကျွန်တော် အကြိုက်ဆုံးနဲ့ အလိုအပ်ဆုံး featuer ကတော့ Codable ပါပဲ။

struct Card: Codable {
    enum Suit: String, Codable {
        case clubs, spades, hearts, diamonds
    }

    enum Rank: Int, Codable {
        case ace = 1, two, three, four, five, six, seven, eight, nine, ten, jack, queen, king
    }

    var suit: Suit
    var rank: Rank
}

let hand = [Card(suit: .clubs, rank: .ace), Card(suit: .hearts, rank: .queen)]

Codeable ဆိုတာပါလာပြီးတော့ အထက်ပါ အတိုင်း ကြေငြာထားပါတယ်။

var encoder = JSONEncoder()
let jsonData = try encoder.encode(hand)
String(data: jsonData, encoding: .utf8)

ဒါဆိုရင်တော့ ကျွန်တော်တို့တွေ struct ကနေ json string ရပါပြီ။

[{"rank":1,"suit":"clubs"},{"rank":12,"suit":"hearts"}]"

ဆိုပြီး တော့ ထွက်လာပါလိမ့်မယ်။

နောက်ပြီး JSON string ကိုလည်း struct အနေနဲ့ လွယ်လင့်တကူ ပြောင်းနိုင်ပါတယ်။

let decoder = JSONDecoder()
let decoded = try decoder.decode([Card].self, from: jsonData)

ဒါဆိုရင်တော့ ကျွန်တော်တို့ object ပြန်ရပါပြီ။

swapAt

Array အခန်းနေရာပြောင်းမယ်ဆိုရင် swapAt ကို အသုံးပြုနိုင်ပါတယ်။

var numbers = [1,2,3,4,5]
numbers.swapAt(0,1)
numbers

Class and Subtype existentials

Objective-C သမားတွေ အတွက် ဒါကတော့ သိပြီးသားပါ။ သို့ပေမယ့် Siwft 3 မှာ မပါဝင်လာလို့ အဆင်မပြေဖြစ်ခဲ့တယ။်

@interface MyViewController
- (void)setup:(nonnull UIViewController<UITableViewDataSource,UITableViewDelegate>*)tableViewController;
@end

ကို Swift 3 မှာ import လုပ်လိုက်ရင်

class MyViewController {
    func setup(tableViewController: UIViewController) {}
}

ဆိုပြီး ဖြစ်သွားပါတယ်။ ဒါက မမှန်ပါဘူး။ ဘာဖြစ်လို့လည်းဆိုတော့

let myViewController = MyViewController()
myViewController.setup(UIViewController())

ဆိုပြီး assign လုပ်လို့ရနေတယ်။ တကယ်တော့ UITableViewDataSource နှင့် UITableViewDelegate လိုအပ်တယ်။

Swift 4 မှာတော့

class MyViewController {
    func setup(tableViewController: UIViewController & UITableViewDataSource & UITableViewDelegate) {}
}

ဆိုပြီး ဖြစ်လာပါပြီ။ UIViewController ဟာ UITableViewDataSource ကော UITableViewDelegate ကိုပါ ထည့်ထားမှ ရမယ် ဆိုသည့် သဘောပါ။

တခြား memory ပိုင်း ပြင်ထားတာတွေ ပိုမြန်အောင် လုပ်ထားသည့် အပိုင်းတွေ ၊ အကုန်လုံး ပြည့်ပြည့်စုံစုံ ကို Apple ရဲ့ What’s New in Swift မှာ သွားကြည့်နိုင်ပါတယ်။

Leave a Comment

Your email address will not be published. Required fields are marked *

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