【问题标题】:Get one object in a set of objects by property name in Swift在 Swift 中通过属性名称获取一组对象中的一个对象
【发布时间】:2016-11-20 20:17:09
【问题描述】:

我有一个 NSSet,其中包含一堆 Detail 对象。每个 Detail 对象都有 .name 和 .text 属性。我想在 .name = "memo" 的集合中找到一个特定的 Detail 并查看其 .text 属性中包含的内容。

我到底该怎么做?

(.indexOf 不起作用。如果我需要以某种方式使用 find 和 .map,或者如果有一种方法可以在 Swift 中直接访问该特定对象,我现在就不用了。)

为了清楚起见,我使用的是 Core Data,我的每个“事件”对象都与许多 Detail 对象有关系。 NSSet of Details 是我从给定事件中得到的集合。

再一次,它看起来是这样的:

细节对象有属性

.name

.文本

我从活动的“事件”中获取详细信息,如下所示:

var someDetails: NSSet()?
someDetails = event.details!

所以现在我有了该事件的详细信息。

现在我想访问 .name = "memo" 的细节对象,看看它的 .text 属性是什么。

自己创建详细信息要容易得多,因为我所要做的就是创建详细信息管理对象,分配其属性,然后将其添加到集合中。当集合中包含我需要的所有对象时,我只需将其分配给 event.details 并保存回 Core Data。我从没想过要访问一个单独的“详细信息”会变得更加困难。

我不知道下一步该怎么做才能直接访问。

我是否被困在循环中,查看每个对象,然后取出我想要的对象?

谢谢!

【问题讨论】:

    标签: swift core-data properties set


    【解决方案1】:

    你应该使用Set而不是NSSet,不过我会回答你关于NSSet的问题。

    我想你有这样的课程

    class Detail: NSObject {
        let name: String
        let text: String
    
        init(name: String, text: String) {
            self.name = name
            self.text = text
        }
    }
    

    还有一个像这样的NSSet

    let details = NSSet(array: [
        Detail(name: "a", text: "1"),
        Detail(name: "b", text: "2"),
        Detail(name: "c", text: "3"),
        Detail(name: "d", text: "4")]
        )
    

    现在你想要name"a" 的所有榆树,然后写

    let results =  details.flatMap { $0 as? Detail }.filter { $0.name == "a" }
    

    最后打印出来

    for result in results {
        print(result.text)
    }
    

    【讨论】:

    • 正是我想要的。谢谢!
    猜你喜欢
    • 2021-10-23
    • 1970-01-01
    • 2014-09-23
    • 2022-10-19
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    相关资源
    最近更新 更多