[英]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
會工作,但沒有運氣。 我該如何轉換呢?
只需橋接即可與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:)
暫時解決了此問題。 我還擴展了CKRecord
的subscript
,直到蘋果公司解決此問題為止。
extension CKRecord {
@nonobjc
subscript(key: String) -> Any? {
set {
setValue(newValue, forKey: key)
}
get {
return value(forKey: key)
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.