gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:31:42 24 4
gpt4 key购买 nike

我试图在将项目附加到 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com