如何将 Array<String> 转换为充满 NSString 的 NSArray

How to cast Array<String> to NSArray full of NSString

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

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

会工作,但没有这样的运气。我该如何转换?

var str = "Hello, playground"

var arrayString:[String] = [str]

var arrayNSString = NSMutableArray()

for p in 0..<arrayString.count
{
   arrayNSString.add(arrayString[p] as NSString)
}

希望对您有所帮助。

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

let a = ["a", "bc", "def"]
let nsa = NSArray(array: a)
nsa[0] is NSString // *** true ***

这里真正的问题是下标被破坏了,你可以用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)
        }
    }
}