首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在NSData上使用.forEach

在NSData上使用.forEach
EN

Stack Overflow用户
提问于 2019-09-27 05:29:58
回答 1查看 146关注 0票数 1

谁能告诉我为什么下面的前两个循环在iOS11上不起作用,而在iOS13上起作用,最后两个循环在iOS11和iOS13上起作用?

似乎iOS13允许自动将NSData用作数据,但不允许使用iOS11?这不是应该在某个地方清楚地记录下来的东西吗?

代码语言:javascript
复制
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)")
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2019-09-27 06:50:18

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

由于iOS SDK13(或者可能是12.x),NSData有这样的扩展:

代码语言:javascript
复制
extension NSData : DataProtocol {

    //...
}

DataProtocol继承了Collection where Element == UInt8,所以现在,在iOS SDK13中,NSData作为UInt8Collection (或Sequence)工作。

但是,由于NSData是不可变类型,因此在大多数情况下使用引用类型没有意义。最好总是尽可能地使用Data

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58125017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档