[英]How to Represent Dictionary as NSValue in Swift 3?
我有以下字典:
let example: [String: (Int, Int)] = ["test": (0, 1)]
我需要将其存储为NSData变量,然后首先将其转换为NSValue,我尝试按以下步骤进行操作:
let nsval = NSValue().getValue(example as! UnsafeMutableRawPointer)
只遇到错误:
无法将'Void'类型的值(aka'()')转换为指定的'NSValue'类型
我已经看到建议使用的答案:
let test = UnsafeMutablePointer.load(example)
但这也会产生错误:
类型'UnsafeMutablePointer <_>'没有成员'load'
那么,如何在Swift 3中将字典转换为NSValue?
并非所有的swift类型都与Foundation类兼容。 因此,您不能构造可以包含[String: (Int, Int)]
类型的NSValue,但是可以从NSDictionary开始。 删除元组并选择与objc兼容的类型。 那么您可以将let example:
类型更改为let example:
NSDictionary。 与NSValue方法一起使用。
就是说,如果您试图将常规objc类型转换为NSData进行常规序列化,那么您将可以从NSKeyedArchiver
/ NSKeyedUnarchiver
方法(例如.archivedData(withRootObject: Any) -> Data
获得更多好处。仍然不支持元组。)
从理论上讲,如果您真的想将一个快速的元组转换为数据对象,则可以这样做。
var x:(Int, Int) = (4, 2)
var bytes:Data = withUnsafeBytes(of: &x){ g in
var d = Data()
for x in g {
d.append(x)
}
return d
}
相反:
var y:(Int, Int) = (0,0)
bytes.withUnsafeBytes { (x:UnsafePointer<(Int, Int)>) in
y = x.pointee
}
print(y) // prints (4, 2)
当心 :这是通往黑暗面的道路。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.