我正在尝试在 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]