【发布时间】:2016-10-13 08:41:50
【问题描述】:
我有这个 Objective-C 方法。
+ (NSArray<NSString *> *_Nullable)getValues;
在 Swift 中转换为 [String] 并且必须传递给 Swift 中的另一个 Objective-C 方法,该方法在 Objective-C 中看起来像
- initWith:(NSArray<NSObject*> *_Nonnull)parameter;
所以我有这个 Swift 代码:
let bla = C.getValues()
MyClass(bla)
这在 Objective-C 中完美无缺,但在 Swift 中,它当然抱怨 [String] 不是 [NSObject] 的子级,因为它自动将其从 [NSString] 转换为 [String]。
我怎样才能阻止 Swift 这样做?
let bla = C.getValues() as! [NSString]
不起作用,因为它以其无限的智慧首先将其从 Objective-C 转换为 Swift 对象,然后尝试将其转换回 Objective-C 对象。
这里的消息:'NSObject' 不是'字符串'。
PS:我知道我可以遍历所有内容并制作一组转换后的副本,但肯定有比这更好的方法:
var strings: [NSObject] = []
for string in bla! {
strings.append(string as NSString)
}
【问题讨论】:
-
- initWith:(NSArray<NSString*>..不可能? -
let bla = [C getValues]???请用正确的语法重写问题 -
@vadian 不,它可以获取 NSObject 的所有孩子,而不仅仅是 NSString 的。
-
你试过
MyClass(bla as [NSObject])吗? -
奇怪,为我编译。 – 但是
- initWith:(NSArray<NSObject*> *_Nullable)parameter;以public init!(_ parameter: [NSObject]?)的形式导入Swift,而不是public init!(with parameter: [NSObject]?),所以MyClass(with: bla)根本无法编译。
标签: objective-c swift