Dan*_*ico 0 protocols ios exc-bad-instruction swift
我有一个Printable对象数组,但我需要它们Equatable和AnyObject兼容.
private(set) var items: [Printable] = []
class func withItems<T: AnyObject where T: Equatable, T: Printable>(items: [T], selectedItem: T? = nil) {
... instance init ...
instance.items = items
}
Run Code Online (Sandbox Code Playgroud)
它导致EXC_BAD_INSTRUCTION:
致命错误:无法从Objective-C桥接数组
这是对这个问题的一次尝试:
为什么?
Swift数组必须包含所有一种对象(例如所有String或所有Int).Objective-C NSArray可以包含许多不同类型的对象(例如,一些NSStrings和一些NSNumber).因此,如果从Objective-C获得那种数组,则无法将其神奇地分配到Swift数组引用中.
我在那种情况下所做的就是让阵列变得可以让Swift接受它.我不知道你从Objective-C得到什么的细节是什么; 您的实际策略将取决于这些细节以及您要对阵列执行的操作.一种方法是分配/强制转换为AnyObject的Swift数组.或者您可能决定将其保留为NSArray并完全通过NSArray方法使用它.
这是我自己的代码中的一个例子.arr是一个NSArray,它是NSString和NSNull对象的混合包.我知道没有一个NSString对象是空字符串,所以我用空字符串替换所有NSNull对象,从而给我一个只是字符串的数组,Swift可以处理:
let arr2 = (arr as Array).map { $0 as? String ?? "" }
Run Code Online (Sandbox Code Playgroud)
现在arr2是一个纯粹的Swift [String]数组.
| 归档时间: |
|
| 查看次数: |
1269 次 |
| 最近记录: |