swift4.1更新

条件一致性

如果数组、字典或者可选类型的元素类型遵循Equatable,这可以做相同的操作

合并Equatable和Hashable协议的一致性

// swift4
struct Person: Equatable {
  static func == (lhs: Person, rhs: Person) -> Bool {
    return lhs.firstName == rhs.firstName &&
           lhs.lastName == rhs.lastName &&
           lhs.birthDate == rhs.birthDate &&
           ...
  }
}
// swift4.1
如果 firstName等属性全部遵循了Equatable和Hashable,这可以不用实现 == 运算符

在JSON编码

在Swift 4.1中,苹果给JSONDecoder引入了一个属性keyDecodingStrategy;对应的JSONEncoder引入了一个属性keyEncodingStrategy。这样我们就不需要设置定义CodingKeys了。只需要在decoding的时候把keyDecodingStrategy设置为.convertFromSnakeCase;在encoding的时候把keyEncodingStrategy设置为.convertToSnakeCase。所以上面的代码我们可以改为:

哈希化索引类型 (Index Types Hashable)

let number = [10,20,30,40]
let f1 = \[int].[0]
number[keyPath:f1]

支持关联类型的递归约束

//swift4
protocol Foo {
    associatedtype SomeType: Bar
}
//swift4.1
protocol Sequence {
    associatedtype SubSequence: Sequence
        where Iterator.Element == SubSequence.Iterator.Element, SubSequence.SubSequence == SubSequence

    func dropFirst(_ n: Int) -> Self.SubSequence
}

平台有关

#if os(iOS) || os(tvOS)
  import UIKit
#endif

#if canImport(UIKit)
  import UIKit
#endif

#if (arch(i386) || arch(x86_64)) && (!os(macOS))
    print("Simulator")
#else
    print("Device")
#endif

#if targetEnvironment(simulator)
    print("Simulator")
#endif

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容