Ios 循环核心数据集的正确语法

Ios 循环核心数据集的正确语法,ios,core-data,swift2,Ios,Core Data,Swift2,每当我循环我的核心数据关系(NSSet)时,我必须将集合转换为数组: for student in classroom.students.allObjects as! [Student] { print(student.name) } 或者,我可以正常地循环使用集合,但在使用之前,我必须对项目进行打字: for student in classroom.students { let s = student as! Student print(s.name) } 我知道

每当我循环我的核心数据关系(NSSet)时,我必须将集合转换为数组:

for student in classroom.students.allObjects as! [Student] {
    print(student.name)
}
或者,我可以正常地循环使用集合,但在使用之前,我必须对项目进行打字:

for student in classroom.students {
    let s = student as! Student
    print(s.name)
}
我知道这很简单,但我想做的只是在循环中预先指定NSSet的强制转换,而不必做这些变通

当我尝试这样做时:

for student: Student in classroom.students {
    print(student.name)
}
我收到一个错误:表达式类型“NSSet”不明确,没有更多上下文

如果我尝试这样的方法:

for student in classroom.students as! NSSet([Student]) {
    print(student.name)
}
我得到一个错误:大括号语句块是未使用的闭包


是否有合适的方法从核心数据循环NSSet并预定义类型?

假设
学生
关系是与
学生
的对多关系,您可以使用通用样式语法将关系强制转换为Swift集:

for student in classroom.students! as! Set<Student> {
    print(student.name)
}
用于教室中的学生。学生们!作为!设置{
打印(学生姓名)
}

属性是如何定义的,可能是自动生成的,何时?这个问题是关于核心数据NSSet的,因此属性“Students”将是教室和学生表之间的一对多关系。@TravisM。-我想Wain是在问您的属性在swift中是如何定义的,假设它是由Xcode自动生成的。FWIW,您也在“array”案例中强制转换每一个,您只是通过将整个数组强制转换为只包含Student类型来实现。我明白了,但是属性是用类型说明符定义的吗?我不知道自动生成的版本现在是否是,我从来没有为此需要过它,但是如果可以,它应该可以解决您的问题我不是一个敏捷的人,但是您应该能够将属性定义为
Set
,然后您在使用它时不需要强制转换它。确认这是有效的!谢谢(我想你不需要那个“!”)那些感叹号(问号)伤了我的眼睛。。。在我被迫使用swift之前,我一直避免使用swift的主要原因。