美文网首页iOS Developer
2017WWDC whats new in swift

2017WWDC whats new in swift

作者: 雨_树 | 来源:发表于2017-06-28 16:19 被阅读56次

    Swift关键字 Open Source + Growing Ecosystem

    Language refinements and additions

    Access Control
    "private": 作用域变为可在"extension"中访问

    Composing Classes and Protocols

    "class"和"protocol"可以组合起来使用

    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()
        }
    }
    

    Reference
    Section What's New in Foundation

    • SE-0161 Smart KeyPaths: Better Key-Value Coding for Swift
    • SE-0166 Swift Archival & Serialization
    • SE-0167 Swift Encoders

    Source compatibility

    Swift 4 largely source-compatible with Swift 3
    这次总算是向前兼容Swfit 3了: Swift 3 和 Swift 4可以共存在同一个项目中

    Swift Version
    可以对Target单独设定Swift的版本,但是对我们这种只有单独Target的产品而言,还是只能支持一种啊?

    Tools and performance

    Build Improvements

    新的编译系统提供更快的编译速度,特别是对于大的项目

    "Precompiled Bridging Headers": 在OC/Swift混合代码中桥接头文件会很慢,使用预编译可以有效的加快编译时间

    "Shared Build for Coverage Testing": XCode9不再需要重新编译

    "Indexing While Building": 避免"Background indexing"的重复工作,在编译的过程中直接更新"index"

    Predictable Performance

    "COW Existential Buffers": Copy-On-Write,只有在修改时才拷贝,避免昂贵的堆Heap分配消耗

    "Faster Generic Code": 在使用泛型Generic时,用Stack取代Heap进行栈分配

    Smaller Binaries

    Swift 4 会自动移除未被使用的代码

    "Limited @objec Inference"

    • Swift 3会自动给继承自NSObject的非私有的类和成员自动加上@objc,而Swift 4只有在确定需要的时候才被加入
    • 对于不可再OC中表达的代码自动报错
    • "Migrator"不能够确认所有需要加@objc的方法,但是对于可以确定的,会通过"Warning"的形式报"deprecated"提醒,然后我们再手动的添加
    • 迁移完成后可将"Swift 3 @objec Inference"设置改为"Default"

    "Symbol Size"

    • Swift symbols在symbol table极少使用,在新的配置中自动删除

    Standard library

    Swift Strings

    Swift: A Character is a grapheme

    • Swift 4中对字符处理更快:拉丁文、汉字符、片假名
    • Swift 3 一个strings"包含"一个字符集合
    • Swift 4 一个strings"就是"一个字符集合

    "Simpler one-sided Slicing Syntax"

    • 简化范围运算符为单向

    "Substrings"

    • 区分SubstringsStrings为不同的类型,避免在仅有Substrings存在的情况下占用过多内存
    • Substrings可以当做Strings来使用,享有相同的方法

    "Multi-line String Literals"

    • 优化了多行字符串的书写
    • Swift 3 需要使用换行符
    • Swift 4 直接书写,编译器会自动去除格式"\t\t"

    New Generics Features

    where closure in the associatetype

    • 限定asociatetype

    Generic Subscript

    • Subscript可以使用泛型,包括Return TypeSubscript Type

    Exclusive access to memory

    Non-Exclusive Access to Memory

    无法控制混乱的访问,以及可能导致的性能问题

    Enforcing Exclusive Access to Memory

    Swift 4只允许同时读操作

    Run-time Enforcement

    • 编译阶段不一定知道是否引用同一个实体,可以通过运行时报错
      • Global variables
      • Properties of classes
      • Local variables captured in escaping closures

    Multi-threaded Enforcement

    • 默认的审查无法在多线程情况下工作
      • Default enforcement only catches single-threaded bugs
      • Thread Sanitizer catches multi-threaded bugs (其它的演讲)

    设置

    • Compile-time enforcement: 默认打开
    • Run-time enforcement: 默认关闭

    相关文章

      网友评论

        本文标题:2017WWDC whats new in swift

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