我正在尝试根据 listTitle
属性按字母顺序对 List
对象数组进行排序。这是我的 List
对象:
class List : DBObject {
dynamic var listTitle : NSString!
dynamic var listDate : NSDate!
dynamic var ordered : NSNumber!
dynamic var qrCode : NSString!
dynamic var storeId : NSNumber!
}
这是我的排序函数:
func sortByName() {
var listArray = [List]()
for object in cardViewArray {
let card = object as CardView
listArray.append(card.list)
}
var sortedLists = [List]()
sortedLists = sorted(listArray) { $0.listTitle < $1.listTitle }
reloadView()
}
在 sortedLists
行上,我收到错误:
'Cannot find an overload for 'sorted' that accepts an argument list of type '([(List)], (_, _) -> _)''.
任何和所有帮助将不胜感激。
最佳答案
NSString
没有<
开箱即用:
let s1: NSString = "foo"
let s2: NSString = "bar"
s1 < s2
// error: 'NSString' is not implicitly convertible to 'String'; did you mean to use 'as' to explicitly convert?
对于隐式 NSString
来说,这过去不是什么问题。至String
转换,但 1.2 取消了这一点。
有多种不同的方法可以解决此问题,但请尝试:
sorted(listArray) { ($0.listTitle as String) < ($1.listTitle as String) }
顺便说一句,数组有 sorted
内置方法(可能会执行得更好,因为它更了解它正在排序的内容):
let sortedLists = listArray.sorted { etc. }
此外,每当您发现自己创建了一个空数组,然后用另一个序列的每个元素的转换来填充它时,这都是 map
的一个很好的候选者。 :
let listArray = cardViewArray.map {
let card = $0 as CardView
return card.list
}
关于xcode - 无法使用排序函数 swift 找到重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29745265/