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