NSSet(array: myArray) 在 OS X 上工作但在 Ubuntu 上崩溃

NSSet(array: myArray) works on OS X but crashes in Ubuntu

以下代码可在 OS X 上的 Playground 中运行,但一旦使用 Swift.org.

在 Ubuntu 中编译后便无法运行

在操场上

这按预期工作:

let permutedHands = [["A♦", "A♣", "6♠", "3♦", "T♥"], ["A♣", "A♦", "6♠", "3♦", "T♥"], ["6♠", "A♦", "A♣", "3♦", "T♥"], ["A♦", "6♠", "A♣", "3♦", "T♥"], ["T♥", "6♠", "A♦", "3♦", "A♣"], ["6♠", "T♥", "A♦", "3♦", "A♣"], ["A♦", "T♥", "6♠", "3♦", "A♣"], ["T♥", "A♦", "6♠", "3♦", "A♣"], ["6♠", "A♦", "T♥", "3♦", "A♣"], ["A♦", "6♠", "T♥", "3♦", "A♣"], ["3♦", "6♠", "A♦", "T♥", "A♣"], ["6♠", "3♦", "A♦", "T♥", "A♣"], ["A♦", "3♦", "6♠", "T♥", "A♣"], ["3♦", "A♦", "6♠", "T♥", "A♣"], ["6♠", "A♦", "3♦", "T♥", "A♣"], ["A♦", "6♠", "3♦", "T♥", "A♣"], ["3♦", "T♥", "A♦", "6♠", "A♣"], ["T♥", "3♦", "A♦", "6♠", "A♣"], ["A♦", "3♦", "T♥", "6♠", "A♣"], ["3♦", "A♦", "T♥", "6♠", "A♣"], ["T♥", "A♦", "3♦", "6♠", "A♣"], ["A♦", "T♥", "3♦", "6♠", "A♣"], ["3♦", "T♥", "6♠", "A♦", "A♣"], ["T♥", "3♦", "6♠", "A♦", "A♣"], ["6♠", "3♦", "T♥", "A♦", "A♣"], ["3♦", "6♠", "T♥", "A♦", "A♣"], ["T♥", "6♠", "3♦", "A♦", "A♣"], ["6♠", "T♥", "3♦", "A♦", "A♣"]]

let sortedPerms = permutedHands.map { [=12=].sort() }
let permSet = NSSet(array: sortedPerms)
let arr = Array(permSet) // [["3♦", "6♠", "A♣", "A♦", "T♥"]]

swift build for Swift.org in Linux

编译时的错误信息:

cannot convert value of type '[[String]]' to expected argument type '[AnyObject]'
let permSetArray = NSSet(array: sortedPerms)

为了以防万一,我迫不及待地试了一下:

let sortedPerms = perms.map { [=13=].sort() }.map { [=13=] as! AnyObject }

它让编译器高兴,但随后在运行时崩溃:

Could not cast value of type 'Swift.Array' (0x7f84701950d8) to 'Swift.AnyObject' (0x7f84701700e8).
Aborted (core dumped)

我浏览了 Swift GitHub 存储库,但没有发现任何关于 NSSet 的未实现或不完整的内容,它在 Swift.org 的基金会中看起来不错(就我看得出来)。

知道如何调试和修复这个问题吗?解决方法也是可以接受的。

我还没有在 Linux 上尝试 Swift,但是您可以使用此 'pure' Swift 解决方案而不用 import Foundation:

let permutedHands = [["A♦", "A♣", "6♠", "3♦", "T♥"], ["A♣", "A♦", "6♠", "3♦", "T♥"], ["6♠", "A♦", "A♣", "3♦", "T♥"], ["A♦", "6♠", "A♣", "3♦", "T♥"], ["T♥", "6♠", "A♦", "3♦", "A♣"], ["6♠", "T♥", "A♦", "3♦", "A♣"], ["A♦", "T♥", "6♠", "3♦", "A♣"], ["T♥", "A♦", "6♠", "3♦", "A♣"], ["6♠", "A♦", "T♥", "3♦", "A♣"], ["A♦", "6♠", "T♥", "3♦", "A♣"], ["3♦", "6♠", "A♦", "T♥", "A♣"], ["6♠", "3♦", "A♦", "T♥", "A♣"], ["A♦", "3♦", "6♠", "T♥", "A♣"], ["3♦", "A♦", "6♠", "T♥", "A♣"], ["6♠", "A♦", "3♦", "T♥", "A♣"], ["A♦", "6♠", "3♦", "T♥", "A♣"], ["3♦", "T♥", "A♦", "6♠", "A♣"], ["T♥", "3♦", "A♦", "6♠", "A♣"], ["A♦", "3♦", "T♥", "6♠", "A♣"], ["3♦", "A♦", "T♥", "6♠", "A♣"], ["T♥", "A♦", "3♦", "6♠", "A♣"], ["A♦", "T♥", "3♦", "6♠", "A♣"], ["3♦", "T♥", "6♠", "A♦", "A♣"], ["T♥", "3♦", "6♠", "A♦", "A♣"], ["6♠", "3♦", "T♥", "A♦", "A♣"], ["3♦", "6♠", "T♥", "A♦", "A♣"], ["T♥", "6♠", "3♦", "A♦", "A♣"], ["6♠", "T♥", "3♦", "A♦", "A♣"]]

let sortedPerms = permutedHands.map { [=10=].sort() }
var arr: Array<Array<String>> = []
sortedPerms.forEach { (a) -> () in
    let contains = arr.contains{ [=10=] == a }
    if !contains {
        arr.append(a)
    }
}
print(arr) // [["3♦", "6♠", "A♣", "A♦", "T♥"]]