协议扩展无法调用集合API求助:[String]无move成员
解决方案
报错的核心原因是Array的move(fromOffsets:toOffset:)方法仅在Swift 5.9及以上版本中提供,若你的项目使用的Swift版本低于5.9,就会触发这个编译错误。以下是两种可行的解决思路:
1. 升级Swift版本
将项目的Swift版本升级到5.9或更高,即可直接使用系统原生的move(fromOffsets:toOffset:)方法,无需修改现有代码。
2. 手动实现移动逻辑(兼容低版本Swift)
若无法升级Swift版本,可以在协议扩展中手动实现数组元素的移动逻辑,替代系统API:
protocol Database: AnyObject { var records: [String] { get set } } extension Database { func move(from source: IndexSet, to destination: Int) throws { var mutableRecords = records // 倒序移除元素,避免索引偏移 let elementsToMove = source.sorted(by: >).map { mutableRecords.remove(at: $0) } // 计算正确的插入位置:若目标位置在被移元素的最大索引之后,需调整偏移量 let insertIndex = destination > (source.max() ?? 0) ? destination - source.count : destination // 反转元素后插入,恢复原顺序 mutableRecords.insert(contentsOf: elementsToMove.reversed(), at: insertIndex) records = mutableRecords // try save() } }
内容的提问来源于stack exchange,提问作者bobby123uk
相关产品推荐
相关产品推荐

