swift - 为什么我无法获取过滤后的 Realm 列表的索引?

标签 swift realm

我试图在将项目附加到 List<> 对象后找到该项目的索引,以便我可以插入到 TableView 中。

表格 View 用.filter进行分区,因此我必须在查找indexPath之前应用过滤器。但是,该过滤器似乎破坏了 indexOf 功能。

我注意到函数 .map 具有相同的效果。

import UIKit
import RealmSwift

class Model: Object {
    @objc dynamic var title: String = ""
    let items = List<Model>()
}

class ViewController: UIViewController {

    var models: Results<Model>?
    var parentModel: Model?
    var items = List<Model>()
    let realm = try! Realm()

    override func viewDidLoad() {
        super.viewDidLoad()

        if !UserDefaults.standard.bool(forKey: "IsNotFirstTime") {
            populateRealm()
            UserDefaults.standard.set(true, forKey: "IsNotFirstTime")
        }

        models = realm.objects(Model.self)

        parentModel = models!.first
        items = parentModel!.items

        let child = Model()
        child.title = "Child"

        try! realm.write {
            parentModel!.items.append(child)
        }

        print(items.index(of: child)) // prints correct value
        print(items.filter({ $0.title == "Child" }).index(of: child)) // prints nil
    }

    func populateRealm() {
        let parent = Model()
        parent.title = "Parent"
        try! realm.write {
            realm.add(parent)
        }
    }
}

第一个打印找到了对象,但第二个打印没有找到该对象,尽管映射没有整体效果。

奇怪的是,该对象在过滤列表中,正在执行:

print(items.filter({ $0.title == "Child" }).first

返回对象,因此它就在那里。

编辑

经过进一步检查,看起来不是过滤器而是数组类型的转换破坏了功能,在没有过滤器的情况下转换为数组也会做同样的事情。

print(Array(items).index(of: child)) // prints nil

最佳答案

当您想使用mapping时例如,您应该添加一个属性来根据它映射您的对象

    print(items.map({ $0.id }).index(of: child.id))

如果你以这种方式使用它,它将返回你期望的结果

关于swift - 为什么我无法获取过滤后的 Realm 列表的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50189689/

相关文章:

java - 将 BigInteger 与 Realm Java 一起使用?

swift - 位置更改时 Realm 更新/添加

swift - RealmSwift 错误 : "RLMException, reason: Collection was mutated while being enumerated."

ios - swift 2 : Alamofire POST issue for login

swift - 扩展功能屏幕截图未捕获 iphone 和 ipad 中的相同区域

ios - 尝试为所有出现的 TextView 字符串着色

ios - 从表的字典中获取数据

java - 回调监听器无法正常工作

swift - 使用 Swift 将 CLLocationCoordinate2d 转换为街道地址

ios - Swift iOS 意图扩展 : The data couldn't be read because it isn't in the correct format