Ios 如何施放阵列<;字符串>;满是字符串的数组 在使用CuldKIT时,所有类型都需要Objy-C基础类。由于CloudKit中使用的大多数类型都是从Swift桥接到Obj-C的,因此没有任何问题(即,将[key]=1记录为NSNumber),但我在将数组转换为适当的CloudKit类型(CK仪表板中的字符串列表)时遇到问题。我想
Ios 如何施放阵列<;字符串>;满是字符串的数组 在使用CuldKIT时,所有类型都需要Objy-C基础类。由于CloudKit中使用的大多数类型都是从Swift桥接到Obj-C的,因此没有任何问题(即,将[key]=1记录为NSNumber),但我在将数组转换为适当的CloudKit类型(CK仪表板中的字符串列表)时遇到问题。我想,ios,swift,cocoa,cloudkit,Ios,Swift,Cocoa,Cloudkit,将[key]=([myString]作为[NSString])记录为NSArray 会有用的,但没有这样的运气。我如何转换这个?var str=“你好,游乐场” var str = "Hello, playground" var arrayString:[String] = [str] var arrayNSString = NSMutableArray() for p in 0..<arrayString.count { arrayNSString.add(arrayStri
将[key]=([myString]作为[NSString])记录为NSArray
会有用的,但没有这样的运气。我如何转换这个?var str=“你好,游乐场”
var str = "Hello, playground"
var arrayString:[String] = [str]
var arrayNSString = NSMutableArray()
for p in 0..<arrayString.count
{
arrayNSString.add(arrayString[p] as NSString)
}
变量arrayString:[String]=[str]
var arrayNSString=NSMutableArray()
对于0中的p..仅桥接将与NSArray
的array
构造函数一起工作:
let a = ["a", "bc", "def"]
let nsa = NSArray(array: a)
nsa[0] is NSString // *** true ***
这里真正的问题是下标被破坏了,您可以使用setObject(forKey:)
来使用本机Swift类型
编辑:
我错了,setObject(forKey:)
不起作用,但是我通过使用setValue(forKey:)
暂时解决了这个问题。我还扩展了CKRecord
,添加了下标
,直到苹果解决了这个问题
extension CKRecord {
@nonobjc
subscript(key: String) -> Any? {
set {
setValue(newValue, forKey: key)
}
get {
return value(forKey: key)
}
}
}
将数组映射到一个新的数组对于应该被桥接的类型来说似乎有很多开销。更简单的方法是让nsa=NSArray(array:a.map({$0 as NSString}))
。@Grimxn桥接是否确保让nsa1=NSArray(array:a)
是NSString
的数组?它不是下标,但Swift本机类型不采用该CKRecordValue。与下标一样,<代码> SETObjor(FordK::)/Cl>也不适用于SWIFT 3而不将SWIFT类型强制为Obj-C基金会类型。您是对的。我刚刚查看了我的生产项目,我可以看到我使用的是setValue(forKey:)
。我会更新我的答案作为替代。