Swift4迁移中RealmSwift的List初始化问题求助
解决RealmSwift迁移Swift4时的List初始化问题
嘿,这个问题我在从Swift 2.x迁移到Swift 4的时候也踩过坑!咱们一步步来理清楚:
为啥旧代码报错了?
Swift 4对应的RealmSwift版本里,List的初始化规则变了——原来直接传Results对象的初始化器被移除了,所以你写List(realm.objects(...))才会弹出Argument passed to call that takes no arguments的编译错误。
正确的写法应该是这样
现在要初始化包含查询结果的List,得先创建空实例,再用append(objectsIn:)方法把Results里的元素批量加进去。这个方法支持所有遵循Sequence协议的集合,正好适配Realm的查询结果:
class func myFunc() -> List<MyClass> { let realm = try! Realm() // Swift4里sorted方法推荐显式使用byKeyPath参数名,代码可读性更高 let sortedResults = realm.objects(MyClass.self).sorted(byKeyPath: "name", ascending: true) let resultList = List<MyClass>() resultList.append(objectsIn: sortedResults) return resultList }
补充两个小提醒
- 你之前返回
List<MyClass>()当然没编译错,但那是个空列表啊,自然拿不到任何数据,肯定没法正常工作😂 - 关于
try! Realm():实际项目里尽量别用强制解包,万一Realm初始化失败(比如权限问题、文件损坏)会直接崩溃,建议换成do-catch处理错误:class func myFunc() -> List<MyClass> { do { let realm = try Realm() let sortedResults = realm.objects(MyClass.self).sorted(byKeyPath: "name", ascending: true) let resultList = List<MyClass>() resultList.append(objectsIn: sortedResults) return resultList } catch { print("Realm初始化出错啦:\(error.localizedDescription)") // 这里可以根据业务需求返回空列表或者做其他错误处理 return List<MyClass>() } }
内容的提问来源于stack exchange,提问作者Elena
相关产品推荐
相关产品推荐

