简体   繁体   中英

Swift 3 - No 'sort' candidates produce the expected contextual result type 'NSMutableArray'

I am attempting to sort a mutable array in Swift 3.1.1, but get the same error every time: No 'sort' candidates produce the expected contextual result type 'NSMutableArray'. Is there a way to sort a mutable array (Ints only) in ascending order?

In my code, elements from options are being removed. Removed (the array) is adding the removed elements. At the end of the code I am attempting to add the elements from the removed array back to options and sort it.

// 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
        }
    }
}

As already mentioned, in Swift you should really be using the Array<T> for this (aka, [T] ) instead of NSMutableArray . For instance:

var options = [Int]()

when adding elements to it, use append (and, by the way, you can drop the type cast as well):

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

finally, when sorting the array, use the sort function (it doesn't return a value; the array is sorted in-place):

options.sort()

and you don't need even to provide a comparation function since integers conform to the Comparable protocol.

NSMutableArray , among other Objective C types, was implicitly bridged to/from its Swift counterparts. In a move to lessen peoples (usually unnecessary) reliance on these Objective C types, this implicit bridging has been changed in Swift 3, and now needs an explicit type coercion (eg nsArray as [Int] )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM