Swift 3 - 没有"排序"候选生成预期的上下文结果类型"NSMutableArray"



我正在尝试在 Swift 3.1.1 中对可变数组进行排序,但每次都收到相同的错误:没有"排序"候选项生成预期的上下文结果类型"NSMutableArray"。有没有办法按升序对可变数组(仅限整数(进行排序?

在我的代码中,选项中的元素正在被删除。已删除(数组(正在添加已删除的元素。在代码的末尾,我尝试将已删除数组中的元素添加回选项并对其进行排序。

// set up tiles
var options = NSMutableArray()
var removed = NSMutableArray()
for i in 1...49 {
    options.add(i as Int)
    print("options(options.count)")
}
for i in 1...49 {
    print("i = (i)")
    options.remove(i)
    let tilea: Int = options[Int(arc4random_uniform(UInt32(options.count)))] as! Int
    options.remove(tilea)
    let tileb: Int = options[Int(arc4random_uniform(UInt32(options.count)))] as! Int
    options.remove(tileb)
    removed.add([i, tilea, tileb])
    print(options.count)
    if options.count < 20 {
        options.add(removed)
         options = options.sort {
             $0 < $1
        }
    }
}

如前所述,在 Swift 中,您实际上应该为此使用 Array<T>(又名 [T] (,而不是 NSMutableArray 。例如:

var options = [Int]()

向其添加元素时,请使用append(顺便说一下,您也可以删除类型强制转换(:

options.append(i)
options.append(contentsOf: [i, j, k])

最后,对数组进行排序时,使用 sort 函数(它不返回值;数组就地排序(:

options.sort()

而且您甚至不需要提供比较函数,因为整数符合Comparable协议。

NSMutableArray 在其他 Objective C 类型中,隐式地桥接在它的 Swift 对应物之间。为了减少人们对这些 Objective C 类型的依赖(通常是不必要的(,这种隐式桥接在 Swift 3 中发生了变化,现在需要一个显式的类型强制(例如nsArray as [Int]

最新更新