Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios EXC_错误_指令对象数组分配Swift_Ios_Swift_Protocols_Exc Bad Instruction - Fatal编程技术网

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
的目的是什么?我刚刚编辑了这个问题,谢谢