【问题标题】:LazyFilterBidirectionalCollection<Results<datatype>>' to expected argument type '[datatype]'LazyFilterBidirectionalCollection<Results<datatype>>' 到预期的参数类型 '[datatype]'
【发布时间】:2017-07-13 14:28:26
【问题描述】:

在我将项目从 swift 2.3 转换为 swift 3 后,我在 Realm Filter 中收到此错误,我无法在数组中获取过滤器结果:

func filterUsers(_ searchText: String, completion: (([Lawyer]) -> Void)) {

        let bgRealm = try! Realm()            // Filter the whole list of users



let results = bgRealm.objects(Lawyer.self).filter { (cc) -> Bool in
    cc.name.contains2(searchText) ||
        cc.name.contains2(searchText) ||
        cc.phoneNumber2.contains2(searchText)

}
    print(results)


    completion(results)

}

【问题讨论】:

  • 是的,你可以。只需在声明时指定results 类型,如let results: [Lawyer]

标签: iphone swift3 realm swift2.3


【解决方案1】:

filtermap 等是对objects 返回的Results 的惰性操作。这是在诸如LazyFilterBidirectionalCollection&lt;T&gt; 之类的类型中实现的。要实际执行过滤并获得结果数组,您需要通过包装 Array 初始化程序将此集合提升为数组(例如 Array(bgRealm.objects...))

From the docs:

查询返回一个Results实例,其中包含一个集合 对象。结果有一个与数组和对象非常相似的界面 可以使用索引下标访问包含在结果中。 与数组不同,结果仅包含单个子类类型的对象。 Realm 中的所有查询(包括查询和属性访问)都是惰性的。 只有在访问属性时才会读取数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 2011-08-03
    • 2013-10-28
    • 2019-09-20
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    相关资源
    最近更新 更多