Ios EXC_错误_指令对象数组分配Swift
我有一个可打印对象的数组,但我需要它们是相等的,并且与任何对象兼容Ios EXC_错误_指令对象数组分配Swift,ios,swift,protocols,exc-bad-instruction,Ios,Swift,Protocols,Exc Bad Instruction,我有一个可打印对象的数组,但我需要它们是相等的,并且与任何对象兼容 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 } private(
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
}
private(set)var项:[可打印]=[]
类func with items(items:[T],selectedItem:T?=nil){
…实例初始化。。。
instance.items=项目
}
它会导致EXC_BAD_指令:
致命错误:无法从Objective-C桥接数组
这是解决这些问题的一次尝试:
为什么?Swift数组必须包含所有一种对象(例如,所有字符串或所有Int)。Objective-C NSArray可以包含许多不同类型的对象(例如,一些NSString和一些NSNumber)。因此,如果您从Objective-C获得这种类型的数组,则无法神奇地将其分配到Swift数组引用中 在这种情况下,我要做的是咀嚼数组,使其为Swift所接受。我不知道你从Objective-C得到了什么细节;您的实际策略将取决于这些细节以及您希望对阵列执行的操作。一种方法是分配/转换到任意对象的Swift数组中。或者,您可能决定将其作为NSArray,并完全通过NSArray方法使用它 下面是我自己代码中的一个示例
arr
是一个NSArray,由NSString和NSNull对象混合而成。我知道没有一个NSString对象是空字符串,因此我用空字符串替换所有NSNull对象,从而为我提供了一个字符串数组,Swift可以处理:
let arr2 = (arr as Array).map { $0 as? String ?? "" }
现在,
arr2
是一个纯Swift[String]
数组。一个Swift数组必须包含所有一种对象(例如,所有字符串或所有Int)。Objective-C NSArray可以包含许多不同类型的对象(例如,一些NSString和一些NSNumber)。因此,如果您从Objective-C获得这种类型的数组,则无法神奇地将其分配到Swift数组引用中
在这种情况下,我要做的是咀嚼数组,使其为Swift所接受。我不知道你从Objective-C得到了什么细节;您的实际策略将取决于这些细节以及您希望对阵列执行的操作。一种方法是分配/转换到任意对象的Swift数组中。或者,您可能决定将其作为NSArray,并完全通过NSArray方法使用它
下面是我自己代码中的一个示例arr
是一个NSArray,由NSString和NSNull对象混合而成。我知道没有一个NSString对象是空字符串,因此我用空字符串替换所有NSNull对象,从而为我提供了一个字符串数组,Swift可以处理:
let arr2 = (arr as Array).map { $0 as? String ?? "" }
现在
arr2
是一个纯Swift[String]
数组。您在class func
中使用self
的目的是什么?我刚刚编辑了这个问题,谢谢