在使用CloudKit时,所有类型都需要是Objective-C基础类。由于 CloudKit 中使用的大多数类型都是从 Swift 桥接到 Obj-C 的,因此没有任何问题(即 record[key] = 1 as NSNumber
(,但我在将Array<String>
转换为适当的 CloudKit 类型(CK 仪表板中的字符串列表(时遇到问题。我想
record[key] = ([myString] as [NSString]) as NSArray
会起作用,但没有这样的运气。我怎样才能转换这个?
只需桥接即可与NSArray
的array
构造函数一起使用:
let a = ["a", "bc", "def"]
let nsa = NSArray(array: a)
nsa[0] is NSString // *** true ***
var str = "Hello, playground"
var arrayString:[String] = [str]
var arrayNSString = NSMutableArray()
for p in 0..<arrayString.count
{
arrayNSString.add(arrayString[p] as NSString)
}
希望这有帮助。
这里真正的问题是下标被破坏了,你可以使用 setObject(forKey:)
来使用原生 Swift 类型!
编辑:
我错了,setObject(forKey:)
不起作用,但是我设法通过使用setValue(forKey:)
暂时通过了这个问题。我还用一个subscript
延长了CKRecord
,直到Apple解决问题。
extension CKRecord {
@nonobjc
subscript(key: String) -> Any? {
set {
setValue(newValue, forKey: key)
}
get {
return value(forKey: key)
}
}
}