Swift 中的 NSData 或 Data 是啥?

Posted

技术标签:

【中文标题】Swift 中的 NSData 或 Data 是啥?【英文标题】:What is NSData or Data in Swift?Swift 中的 NSData 或 Data 是什么? 【发布时间】:2017-04-07 01:54:49 【问题描述】:

我对 swift 很陌生,我在 swift 中编程时遇到了“数据”。我在 ios 中使用 UserDefaults 时遇到了它。我通读了 Apple 提供的文档,但不太了解。

谁能给我解释一下它是什么?

static var _currentUser: User?

    class var currentUser: User? 
        get 
            if _currentUser == nil 
                let defaults = UserDefaults.standard
                let savedUser = defaults.object(forKey: "savedUser") as? Data
                if let savedUser = savedUser 
                    let dict = try! JSONSerialization.jsonObject(with: savedUser as Data, options: [])
                    _currentUser = User(currentUserInfo: dict as! NSDictionary)
                
            
            return _currentUser
        
        set(user)
            _currentUser = user
            let defaults = UserDefaults.standard
            if let user = user 
                let data = try! JSONSerialization.data(withJSONObject: (user.userInfo)!, options: [])
                defaults.set(data, forKey: "savedUser")
                print("current user saved")
            
            else 
                defaults.removeObject(forKey: "savedUser")
            
            defaults.synchronize()
        
    

【问题讨论】:

Apple 更改了从 Swift 3 中删除 NS 前缀。所以 NSData 变为 Data。在 Swift 2 及更早版本中,NS 任何地方。例如:NSUserDefaultNSJSONSerializationNSURL、... 谢谢,我得到了@DanhHuynh 的那部分,但它到底是什么东西? @kennytm 发布了真实代码。 Swift 3 中的数据是一个符合收集协议的结构。它是字节的集合([UInt8] 8 位 0-255 的无符号整数数组)。 这是一个代表字节集合的类。就是这样。你还想知道什么? 【参考方案1】:

Data 和 NSData 是用于与原始二进制数据交互的类型。它们通常用于保存比单个字符串、整数、布尔值等更复杂的原始数据。以图像为例。为什么是生的?为了写入和读取文件、数据库、内存等。

例如,在 iOS 上,它广泛用于 Core Data 和 Realm 等数据持久化框架。如果没有 Data,数据持久性框架将需要数百种额外的类型来满足大多数用例,这将是一项难以完成的编程任务,更糟糕的是,会使框架变得臃肿;使用 Data,框架只需要持久化该类型,开发人员负责对其进行编码和解码,允许所有可能的用例。

【讨论】:

【参考方案2】:

NS 前缀来自NeXTSTEP 遗产。 NeXT 是乔布斯被苹果公司解雇后成立的一家电脑公司。

随着 Swift 3 的发布,Apple 移除了 NS 前缀。

来自Apple's documentation:

NSData 及其可变子类 NSMutable​Data 提供数据对象,面向对象的字节缓冲区包装器。数据对象让简单分配的缓冲区(即没有嵌入指针的数据)具有 Foundation 对象的行为。

NSData 创建静态数据对象,NSMutable​Data 创建动态数据对象。 NSData 和 NSMutable​Data 通常用于数据存储,在分布式对象应用程序中也很有用,其中数据对象中包含的数据可以在应用程序之间复制或移动。

【讨论】:

以上是关于Swift 中的 NSData 或 Data 是啥?的主要内容,如果未能解决你的问题,请参考以下文章

错误处理swift中的NSRangeException

Objective - C to Swift : NSData with NSJSONSerialisation

如何在 iOS 中将 mp4 文件存储为 Data 或 NSData 对象?

将UIImage转换为NSData并在Swift中转换回UIImage?

NSArray怎么转换为NSData

如何在swift中保存NSUserDefaults中的颜色?