Swift 3 - 没有 'sort' 个候选人产生预期的上下文结果类型 'NSMutableArray'
Swift 3 - No 'sort' candidates produce the expected contextual result type 'NSMutableArray'
我试图在 Swift 3.1.1 中对可变数组进行排序,但每次都出现相同的错误:
没有 'sort' 候选人产生预期的上下文结果类型 'NSMutableArray'。
有没有办法按升序对可变数组(仅限 Ints)进行排序?
在我的代码中,正在删除选项中的元素。 Removed(数组)是添加被移除的元素。在代码的末尾,我试图将已删除数组中的元素添加回选项并对其进行排序。
// 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 {
[=13=] <
}
}
}
如前所述,在 Swift 中你真的应该为此使用 Array<T>
(又名 [T]
)而不是 NSMutableArray
。例如:
var options = [Int]()
向其添加元素时,使用 append
(顺便说一句,您也可以删除 类型转换 ):
options.append(i)
options.append(contentsOf: [i, j, k])
最后,当排序数组时,使用sort
函数(它没有return一个值;数组就地排序):
options.sort()
而且您甚至不需要提供比较函数,因为整数符合Comparable
协议。
NSMutableArray
,以及其他 Objective C 类型,被隐式桥接 to/from 它的 Swift 对应类型。为了减少人们(通常是不必要的)对这些 Objective C 类型的依赖,此隐式桥接已在 Swift 3 中更改,现在需要显式类型强制转换(例如 nsArray as [Int]
)
我试图在 Swift 3.1.1 中对可变数组进行排序,但每次都出现相同的错误: 没有 'sort' 候选人产生预期的上下文结果类型 'NSMutableArray'。 有没有办法按升序对可变数组(仅限 Ints)进行排序?
在我的代码中,正在删除选项中的元素。 Removed(数组)是添加被移除的元素。在代码的末尾,我试图将已删除数组中的元素添加回选项并对其进行排序。
// 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 {
[=13=] <
}
}
}
如前所述,在 Swift 中你真的应该为此使用 Array<T>
(又名 [T]
)而不是 NSMutableArray
。例如:
var options = [Int]()
向其添加元素时,使用 append
(顺便说一句,您也可以删除 类型转换 ):
options.append(i)
options.append(contentsOf: [i, j, k])
最后,当排序数组时,使用sort
函数(它没有return一个值;数组就地排序):
options.sort()
而且您甚至不需要提供比较函数,因为整数符合Comparable
协议。
NSMutableArray
,以及其他 Objective C 类型,被隐式桥接 to/from 它的 Swift 对应类型。为了减少人们(通常是不必要的)对这些 Objective C 类型的依赖,此隐式桥接已在 Swift 3 中更改,现在需要显式类型强制转换(例如 nsArray as [Int]
)