Swift 4里的新东西

  • 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) 
"""
  1. 新增针对 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..
  • 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重写项目的故事

更多

请关注豆志昂扬微信公众号获取更多内容:

  • 直接添加公众号豆志昂扬
  • 微信扫描下图二维码;
Swift 4里的新东西_第1张图片

你可能感兴趣的:(Swift 4里的新东西)