Swift 为Array添加remove方法遇到的问题
来源:互联网 发布:淘宝墙上挂的饰品 编辑:程序博客网 时间:2024/05/18 03:16
在使用Swift的Array的时候发现没有removeObject方法,出于使用原生类型的考虑不打算换成NSMutableArray,于是在网上找到解决方式如下:
为Array类添加扩展
extension Array where Element: Equatable { // Remove first collection element that is equal to the given `object`: mutating func remove(_ object: Element) { if let index = index(of: object) { remove(at: index) } }}
代码摘自:http://stackoverflow.com/questions/24938948/array-extension-to-remove-object-by-value
var a = [1,2,2,3]a.remove(2)一般流畅使用。
在Playground中测试以上例子确实无比顺利,但是具体项目编写的时候一直提示问题,
提示为:incorrect argument label in call (have 'object:', expected 'at:')
而且在我尝试使用index(of: object)方法的时候会提示:
Cannot invoke 'index' with an argument list of type '(of: AnyObject)'
经过反复研究,发现这是我的疏忽。
由于对于Swift的类型严格的不熟悉,我在声明Array的时候使用了
var finishedLines = Array<Any>()的方式,但是Any并不是一个遵守Equatable协议的表示,即便我存入数组里的都是继承自NSObject的对象,而NSObject原生遵守Equatable协议,但是在类型严格的语言情况下这会被否定。而事实上我存在里面的全都是Line类型实例,一个继承自遵守Equatable协议的NSObject的类。
在把声明换成以下写法之后一切终于正常进行。
var finishedLines = Array<Line>()
这一次问题的主要原因在于我对类型严格和类型检查的不了解和不熟悉,查找问题源头的时候也有验证过自己的类是否遵循了协议,但是却忽视了数组的声明,所以才会冒出明明所有对象都遵循协议却偏偏不能正常识别和调用的问题。
0 0
- Swift 为Array添加remove方法遇到的问题
- 为javascript的Array添加个has(value),remove(value),removeAt(index)方法
- 记一次处理 list 的 remove 方法遇到的问题
- ArrayList在执行remove方法时遇到的问题
- 在Array原型链上扩展remove,contain等方法所遇到的坑
- 为 Array 对象添加一个去除重复项的方法
- Jquery之Array拓展的remove方法
- swift开发遇到的问题
- Swift学习遇到的问题
- vue动态为数据添加新属性遇到的问题
- List使用remove(index);遇到的问题;
- 今天遇到的对List,ArrayList的remove方法的一个小问题
- 在treegrid方法添加checkbox所遇到的问题。
- 在做动态添加删除行的时候,使用jquery遇到的问题:$("#participantList tr").eq(i).remove();
- Swift 学习及遇到的问题 - 1
- swift NSNumber 转 Sting 遇到的问题
- Swift 3.0 遇到的一些问题
- 添加maven2遇到的问题
- 安装repo
- 制作 cocoa pods 遇到点问题
- Revit开发获取梁的宽和高
- os.fork
- Struts2输出html代码原样输出
- Swift 为Array添加remove方法遇到的问题
- Qt5_QCustomPlot画实时动态曲线(1)
- LeetCode Weekly Contest 28解题思路
- 1234输出不同且不重复的三位数
- 隐藏表格td的线框
- 利用Python建立本地Web服务在Chrome中运行WebGL
- 小白训练营 TEST by 喵仔
- gulpfile.js文件创建与配置
- JAVA的Map类:HashMap,LinkedHashMap,TreeMap,ConcurrentHashMap,WeakReferenceHashMap