谁能告诉我为什么下面的前两个循环在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)")
}
}
}发布于 2019-09-27 06:50:18
Apple的SDK可能包含针对Swift的现有Objective-C类型的一些扩展,这些扩展在SDK版本中可能有所不同。
由于iOS SDK13(或者可能是12.x),NSData有这样的扩展:
extension NSData : DataProtocol {
//...
}DataProtocol继承了Collection where Element == UInt8,所以现在,在iOS SDK13中,NSData作为UInt8的Collection (或Sequence)工作。
但是,由于NSData是不可变类型,因此在大多数情况下使用引用类型没有意义。最好总是尽可能地使用Data。
https://stackoverflow.com/questions/58125017
复制相似问题