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 မွာ သြားၾကည့္ႏိုင္ပါတယ္။


 
10 Kudos
Don't
move!

Leave a Reply