You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
}

补充两个小提醒

  1. 你之前返回List<MyClass>()当然没编译错,但那是个空列表啊,自然拿不到任何数据,肯定没法正常工作😂
  2. 关于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:27:11