EXC_BAD_INSTRUCTION 对象数组赋值 Swift
Posted
技术标签:
【中文标题】EXC_BAD_INSTRUCTION 对象数组赋值 Swift【英文标题】:EXC_BAD_INSTRUCTION object array assign Swift 【发布时间】:2014-12-09 14:05:46 【问题描述】:我有一个 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
它会导致 EXC_BAD_INSTRUCTION:
致命错误:无法从 Objective-C 桥接数组
这是解决这个问题的一个尝试:
Generic function and attribute with Equatable and Printable as parameters in Swift为什么?
【问题讨论】:
您在class func
使用self
的目的是什么?
我刚刚编辑了问题,谢谢
【参考方案1】:
一个 Swift 数组必须包含所有一种对象(例如所有 String 或所有 Int)。一个 Objective-C NSArray 可以包含许多不同类型的对象(例如一些 NSStrings 和一些 NSNumbers)。因此,如果你从 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 ?? ""
现在 arr2
是一个纯 Swift [String]
数组。
【讨论】:
以上是关于EXC_BAD_INSTRUCTION 对象数组赋值 Swift的主要内容,如果未能解决你的问题,请参考以下文章
删除 CoreData 对象会导致 EXC_BAD_INSTRUCTION
循环填充数组时的 Swift EXC_BAD_INSTRUCTION
Swift 追加到数组给了我 EXC_BAD_INSTRUCTION EXC_l386_INVOP 在 32 位系统上
Swift 解析 Facebook Graph API 对象时出错:EXC_BAD_INSTRUCTION(code=EXC_I386_INVOP)
NSKeyedArchiver unarchiveObjectWithFile 崩溃与 EXC_BAD_INSTRUCTION