问题

任何人都可以告诉我为什么下面的前两个循环不适用于iOS11,但在iOS13上工作,最后两个循环在iOS11和iOS13上工作?

似乎iOS13允许自动将NSData用作数据,但不是iOS11?这是否应该明确记录在某些地方?

 extension NSData {

    @objc func test() {
        print("Data is \(self)")

        // works with iOS13, but not iOS11
        self.forEach {
            print("byte is \($0)")

        }
        // works with iOS13, but not iOS11
        for byte in self {
            print("byte is \(byte)")
        }

        // works with iOS13, and iOS11
        (self as Data).forEach {
            print("byte is \($0)")
        }

        // works with iOS13, and iOS11
        for byte in self as Data {
            print("byte is \(byte)")
        }
    }
}
 

  最佳答案

Apple的SDK可能包含Swift现有的Objective-C类型的一些扩展,在SDK版本中可能有所不同.

由于iOS SDK 13(或者它可能是12.x),NSData有这个扩展:

 extension NSData : DataProtocol {

    //...
}
 

DataProtocol继承Collection,其中Element == UInt8,所以现在,使用iOS SDK 13,NSData作为Collection(或Sequence)的UInt8.


但是,由于NSData是一个不可变的类型,使用引用类型对大多数情况都没有意义.最好尽量使用Data.

  相同标签的其他问题

iosswiftios13