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