在Swift

时间:2016-11-20 20:17:10

标签: swift core-data properties set

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

我到底该怎么做?

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

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

再次,这就是它的样子:

  

详细对象具有属性

     

.name

     

的.text

我从活动的“事件”中获取详细信息:

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

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

现在我想访问.name =“memo”的详细信息对象,看看它的.text属性是什么。

创建详细信息本身要容易得多,因为我所要做的就是创建详细信息托管对象,分配其属性并将其添加到集合中。当集合包含我需要的所有对象时,我只是将它分配给event.details并保存回Core Data。我从来没有想过要获得个人“细节”会更加困难。

我不知道接下来要做什么直接访问。

我是不是在整个集合中循环,看着每个物体,并拉出我想要的那个?

谢谢!

1 个答案:

答案 0 :(得分:2)

  

您应该使用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)
}