美文网首页
swift4.1更新

swift4.1更新

作者: alex_zn | 来源:发表于2018-07-19 14:37 被阅读0次
    条件一致性

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

    相关文章

      网友评论

          本文标题:swift4.1更新

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