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
任何地方。例如:NSUserDefault
、NSJSONSerialization
、NSURL
、...
谢谢,我得到了@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 及其可变子类 NSMutableData 提供数据对象,面向对象的字节缓冲区包装器。数据对象让简单分配的缓冲区(即没有嵌入指针的数据)具有 Foundation 对象的行为。
NSData 创建静态数据对象,NSMutableData 创建动态数据对象。 NSData 和 NSMutableData 通常用于数据存储,在分布式对象应用程序中也很有用,其中数据对象中包含的数据可以在应用程序之间复制或移动。
【讨论】:
以上是关于Swift 中的 NSData 或 Data 是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Objective - C to Swift : NSData with NSJSONSerialisation
如何在 iOS 中将 mp4 文件存储为 Data 或 NSData 对象?