迭代NSOrderedSet

And*_*ing 18 nsorderedset swift

我正在尝试迭代NSOrderedSet的实例.像这样的东西:

func myFunc() {
    var orderedSet = NSOrderedSet(array: [ 42, 43, 44])

    for n in orderedSet {
        NSLog("%i", n)
    }
}
Run Code Online (Sandbox Code Playgroud)

...但是for循环行会产生这个编译器错误:

'NSOrderedSet' does not have a member named 'Generator'
Run Code Online (Sandbox Code Playgroud)

现在我可以将它转换为这样的数组:

    for n in orderedSet.array {
        NSLog("%i", n)
    }
Run Code Online (Sandbox Code Playgroud)

......但我想知道是否有更好的解决方案?

我也很想知道为什么迭代一套而不是有序集?NSOrderedSet实现NSFastEnumeration,所以它应该正常工作?

Mar*_*n R 40

您可以使用迭代迭代有序集

let orderedSet = NSOrderedSet(array: [ 42, 43, 44])
orderedSet.enumerateObjectsUsingBlock { (elem, idx, stop) -> Void in
    println("\(idx): \(elem)")
}
Run Code Online (Sandbox Code Playgroud)

更新:从Swift 1.2(Xcode 6.3)开始,NSOrderedSet符合 SequenceType并可以枚举for ... in ...:

let orderedSet = NSOrderedSet(array: [ 42, 43, 44])
for elem in orderedSet {
    println(elem)
}
Run Code Online (Sandbox Code Playgroud)

  • 很棒 - 我喜欢Stackoverflow; 问一个天真的问题,并在几分钟内得到两个有用的帖子,其中一个提供了一个全面的问题解决方案.接受这个答案.谢谢你的帮助. (2认同)