swift4.1更新

2018-07-19  本文已影响0人  alex_zn
条件一致性

如果数组、字典或者可选类型的元素类型遵循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

上一篇下一篇

猜你喜欢

热点阅读