gpt4 book ai didi

swift - CGPoint 数组作为不同的结构

转载 作者:行者123 更新时间:2023-11-30 13:08:58 26 4
gpt4 key购买 nike

我正在使用 Firebase,并尝试将 [CGPoint] 数据库用于实时游戏。我尝试将结构类型更改为 [NSValue] 因为至少它符合 AnyObject (请参阅下面的代码),但现在我收到运行时错误。关于如何将我的数据放入它可以接受的结构而不做疯狂的事情的任何建议?

代码

func convert(points : [CGPoint]) -> [NSValue] {

var tup = [NSValue]()

for x in points {
tup.append(NSValue(CGPoint: x))
}

return tup
}

func updateMap() {
var userMap = [String:[AnyObject]]()

userMap["forbiden"] = convert(forbiden)
userMap["roadMap"] = convert(roadMap)
userMap["settlementMap"] = convert(settlementMap)
userMap["upgradeMap"] = convert(upgradeMap)

self.ref.child(altUser+"/"+groupName+"/"+username).setValue(userMap)
}

运行时错误

Terminating app due to uncaught exception 'InvalidFirebaseData', reason: '(setValue:) Cannot store object of type NSConcreteValue at settlementMap.0. Can only store objects of type NSNumber, NSString, NSDictionary, and NSArray.'

最佳答案

不是一个特别简洁的解决方案,但是您可以CGPoint存储为NSNumber的2元素数组(模仿2元组的数组) 元素,在这种情况下,.first.last 将用于访问相应的 xy > 分别在“假元组”2 元素数组中的坐标。例如

func convert(points : [CGPoint]) -> [[NSNumber]] {

var fakeTuples = [[NSNumber]]()

for point in points {
fakeTuples.append([NSNumber(double: point.x.native),
NSNumber(double: point.y.native)])
}

return fakeTuples
}

或者,以更紧凑的形式

func convert(points : [CGPoint]) -> [[NSNumber]] {
return points.map {
[NSNumber(double: $0.x.native),
NSNumber(double: $0.y.native)]
}
}

关于swift - CGPoint 数组作为不同的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38960896/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com