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 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