如何在斯威夫特

问题描述:

创建一个核心数据的关系我有我的数据模型两个实体:学生< - >>级如何在斯威夫特

在Objective-C,我可以使用下面的行链接我的两个对象之间的关系:

[newStudent setValue:[NSSet setWithObject:newGrade] forKey:@"grades"]; 

但是在Swift中,没有NSSet。我如何执行相同的事情?

newStudent.setValue(??????, forKey: "grades") 
+0

当我说“没有NSSet”时,我就错过了。我的意思是在Swift中没有本地设置。然而,正如gregheo指出的那样,我现在看到Swift 1.2添加了一个新的“Set”类型。我想要一个使用此本机Set的解决方案。 –

+0

您是否已经成功使用本机Swift'Set'类型作为'@NSManaged'属性?我无法找到任何人确认在网上正常工作。 – AnthonyM

+1

我最终使用了像Martin R建议的子类。当Xcode中自动生成的子类,它定义如下属性: '@NSManaged VAR gradesRelationship:NSSet' 然后在我的代码我用斯威夫特设置是这样的: 'VAR thisGradeSet:设置? var thisGrade:GradeElement? ! thisGradeSet = thisStudent .gradesRelationship.filteredSetUsingPredicate(cellPredicate) VAR thisScore:INT = thisGrade .score为INT thisScore = 95 thisGrade .score = thisScore' –

如前所述,您可以使用NSSet来分配多对多关系。

但它实际上是更容易逆(一对一)的关系 分配从GradeStudent:在newGrade对象

newGrade.setValue(newStudent, forKey: "student") 

这将自动更新的反比关系,即添加grades财产newStudent

,哪些是你真正应该做的是创造NSMangedObject子类 您的实体(在“Xcode->编辑”菜单),然后使用 属性访问:

newGrade.student = newStudent 

这是更容易阅读,编写起来更容易,您不会冒着在键字符串中输入错误的风险,并且编译器可以执行 正确的类型检查。

肯定还存在斯威夫特NSSet

newStudent.setValue(NSSet(object: newGrade), forKey: "grades") 

在Xcode中6.3和1.2雨燕,有一个本地Set类型了。这通常跨越NSSetSet<NSObject>

+0

你能告诉我它是如何使用Swift 1.2中的Set来完成的吗?谢谢! –