首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Swift中将向量存储在NSData中

在Swift中将向量存储在NSData中
EN

Stack Overflow用户
提问于 2017-10-13 21:33:04
回答 1查看 320关注 0票数 0

我不明白为什么下面的代码不能工作:

代码语言:javascript
复制
import Foundation
import SpriteKit

var TestVector: CGVector = CGVector(dx: 1, dy: 1)

var Data: Dictionary<String, Any> = ["abc":CGPoint(x: 0, y: 0), "def":1, "ghi":"Try", "jkl":TestVector]


let DataConverted: Data = NSKeyedArchiver.archivedData(withRootObject: Data)

let DataReceived: Dictionary = (NSKeyedUnarchiver.unarchiveObject(with: DataConverted) as! [String : Any])

错误抛出为:错误:执行中断,原因:信号SIGABRT。进程已经被中断,请使用线程返回-x返回到表达式求值前的状态。

对于许多不同类型的数据(String、Int、Double等),一切都工作得很好。但是它对矢量不起作用。

可以通过NSKeyedArchiver归档的数据类型是否有限制?

Thx

J.

EN

回答 1

Stack Overflow用户

发布于 2017-10-13 22:49:56

查看NSValue,它在这个场景中非常完美。

NSValue(cgVector: TestVector)一样添加它,当你从字典中读回它时,只需要像这样let vector = cgVectorValue.cgVectorValue一样把它作为CGVector返回

在您的情况下,您需要:

代码语言:javascript
复制
var TestVector: CGVector = CGVector(dx: 1, dy: 1)
let vectorValue = NSValue(cgVector: TestVector)

let pointValue = NSValue(cgPoint:CGPoint(x: 0, y: 0))

var Data: Dictionary<String, Any> = ["abc":pointValue, "def":1, "ghi":"Try", "jkl":vectorValue]

let DataConverted: Data = NSKeyedArchiver.archivedData(withRootObject: Data)

let DataReceived: Dictionary = (NSKeyedUnarchiver.unarchiveObject(with: DataConverted) as! [String : Any])

if let vectorValue = DataReceived["jkl"] as? NSValue {
    let vector = vectorValue.cgRectValue
}

if let pointValue = DataReceived["abc"] as? NSValue {
    let point = vectorValue.cgPointValue
}

苹果公司一直在使用它,也许你已经看过了,当你收到键盘将显示的通知时,在userInfo字典中,你可以使用以下命令获取键盘大小

代码语言:javascript
复制
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size

请注意使用NSValue封装的CGRectValue get CGRect

来自苹果公司的文档:

NSValue对象可以包含任何标量类型,如int、float和char,以及指针、结构和对象id引用。使用这个类来处理集合(比如NSArray和NSSet)、键值编码和其他需要Objective-C对象的API中的数据类型。NSValue对象总是不可变的。

有关https://developer.apple.com/documentation/foundation/nsvalue的更多信息

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

https://stackoverflow.com/questions/46731212

复制
相关文章

相似问题

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