迭代NSSet并转换为一步输入

Fre*_*sen 5 swift

有没有办法从NSSet(或任何非本机Swift集合)中转换元素,并在一个步骤中将每个元素转换为一个类型.目前我正在这样做

// "zoo" is an NSOrderedSet
for animal in zoo {
  if let animal = animal as? Animal {
    if animal.needFeeding {
      // Feed the animal
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

以上看起来有点笨拙.该集来自CoreData,因此我必须使用NSSet.

Mar*_*n R 23

您可以case letfor循环中使用模式匹配:

for case let animal as Animal in zoo  {
    if animal.needFeeding {

    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,这将跳过不是(子类)实例的元素 Animal.

  • 甚至为什么不用`for case让动物像Animal一样在动物园里动物饲养{...`?;-) (2认同)

Sul*_*han 6

为了完整起见,NSOrderedSet它只是集合和数组的组合,您可以使用其中之一进行迭代,将其强制转换为 SwiftSetArray类型:

for animal in zoo.set as! Set<Animal> {
    if animal.needFeeding {
    }
}
Run Code Online (Sandbox Code Playgroud)

或者

for animal in zoo.array as! [Animal] {
    if animal.needFeeding {
    }
}
Run Code Online (Sandbox Code Playgroud)