Swift 4里的新东西

作者: 豆志昂扬 | 来源:发表于2017-06-26 00:10 被阅读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) 
    """
    
    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..<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()
        }
    

    Swift 4更新中还包括了对内存的互斥访问,编译优化,@objc推断等。 总体来看,Swift 还是一门较为年轻的语言,希望未来在服务器开发,人工智能领域能有更大的发展机会。

    推荐阅读
    Uber 和 Swift重写项目的故事

    更多

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

    • 直接添加公众号豆志昂扬
    • 微信扫描下图二维码;

    相关文章

      网友评论

        本文标题:Swift 4里的新东西

        本文链接:https://www.haomeiwen.com/subject/aswrcxtx.html