如何将数组<String>投射到充满 NSString 的 NSArray



在使用CloudKit时,所有类型都需要是Objective-C基础类。由于 CloudKit 中使用的大多数类型都是从 Swift 桥接到 Obj-C 的,因此没有任何问题(即 record[key] = 1 as NSNumber (,但我在将Array<String>转换为适当的 CloudKit 类型(CK 仪表板中的字符串列表(时遇到问题。我想

record[key] = ([myString] as [NSString]) as NSArray

会起作用,但没有这样的运气。我怎样才能转换这个?

只需桥接即可与NSArrayarray构造函数一起使用:

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)
        }
    }
}

最新更新