如何将 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)
}
希望对您有所帮助。
只需桥接即可,与 NSArray
的 array
构造函数一起使用:
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)
}
}
}
在使用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)
}
希望对您有所帮助。
只需桥接即可,与 NSArray
的 array
构造函数一起使用:
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)
}
}
}