Swift 4里的新东西
2017-06-26 本文已影响85人
豆志昂扬
- �Swift 4中新支持对象和JSON格式之间的序列化和反序列,Swift社区还是听取了广大开发者们的声音,再也不用使用如ObjectMapper的第三方类库。更多阅读
let farm = Farm(name: "Old MacDonald's Farm",
location: Location(latitude: 51.621648, longitude: 0.269273),
animals: [.chicken, .dog, .cow, .turkey, .dog, .chicken, .cow, .turkey, .dog])
let payload: Data = try JSONEncoder().encode(farm)
do {
let farm = try JSONDecoder().decode(Farm.self, from: payload)
let coordinates = "\(farm.location.latitude, farm.location.longitude)"
} catch {
// 处理反序列化错误
}
- 支持多行字符串。在Swift 3要实现类似功能只能通过手动拼接,影响性能,且格式丑陋。这种小而美的功能Swift 4社区早该支持了。�更多阅读
let star = "刘国梁"
let introString = """
马龙、
张继科、
樊振东、
许昕等
退赛为了支持自己的主教练: \(star)
"""
- �新增针对 key-value 的keyPath编码的支持,从Objective-C过来的开发者对KeyPath应该不会感到陌生。 更多阅读
class Person {
var name: String
var friends: [Person] = []
var bestFriend: Person? = nil
init(name: String) {
self.name = name
}
}
var han = Person(name: "Han Solo")
var luke = Person(name: "Luke Skywalker")
luke.friends.append(han)
// �创建keyPath
let firstFriendsNameKeyPath = \Person.friends[0].name
let firstFriend = luke[keyPath: firstFriendsNameKeyPath] // "Han Solo"
// 等价于
luke[keyPath: \.friends[0].name] // "Han Solo"
- String是一个结构对象, 如Map、Filter和Reduce等针对结构对象的经典操作也能用到字符串上,让开发者更愉快的玩耍是Swift社区一直的追求。另外新版本中针对字符串操作性能做了优化,有兴趣的可以了解下copy-on-write. 更多阅读
// map
let abc: String = "abc"
_ = abc.map {
print($0.description)
}
// filter
let filtered = abca.filter { $0 == "a" }
// reduce
let result = abc.reduce("1") { (result, c) -> String in
return result + String(c)
}
- �新增类Python设计中的单边区间设计。 更多阅读
let s = "Hello, World!"
let i = s.index(of: ",")!
//改善前
let greeting = s[s.startIndex..<i]
//改善后
let greeting = s[..<i]
let withComma = s[...i]
let location = s[i...]
- private关键词作用域的变更。恰恰这回到了Swift中2.0中的设计,private作用域以文件为单位,�而fileprivate�将会被废弃。更多阅读
//以下代码在Swift 4中将有编译错误。
struct Foo {
private func bar() {}
}
extension Foo {
private func bar() {}
}
- 类和协议的组合类型。这是一个让人意外的设计,看起来让人着迷。 更多阅读
下面的例子来自WWDC中的分享:
// [UIControl & Shakeable]这种写法是不是很美?
protocol Shakeable{
func shake()
}
extension UIButton:Shakeable{ /* ... */ }
extension UISlider:Shakeable{ /* ... */ }
func shakeEm(controls: [UIControl & Shakeable]) {
for control in controls where control.state.isEnabled {
control.shake()
}
- Dictionary/Set 中的新接口。 更多阅读
Swift 4更新中还包括了对内存的互斥访问,编译优化,@objc推断等。 总体来看,Swift 还是一门较为年轻的语言,希望未来在服务器开发,人工智能领域能有更大的发展机会。
推荐阅读
Uber 和 Swift重写项目的故事
更多
请关注豆志昂扬微信公众号获取更多内容:
- 直接添加公众号豆志昂扬;
- 微信扫描下图二维码;