EXC_BAD_INSTRUCTION对象数组asign Swift

 从前泪流光e_446 发布于 2022-12-07 10:44

我有一个Printable对象数组,但我需要它们Equatable和AnyObject兼容.

private(set) var items: [Printable] = []

class func withItems(items: [T], selectedItem: T? = nil) {
   ... instance init ...
   instance.items = items
}

它导致EXC_BAD_INSTRUCTION:

致命错误:无法从Objective-C桥接数组

这是对这个问题的一次尝试:

在Swift中使用Equatable和Printable作为参数的通用函数和属性

为什么?

1 个回答
  • 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 ?? "" }
    

    现在arr2是一个纯粹的Swift [String]数组.

    2022-12-11 02:09 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有