我尝试按字母顺序基于List
属性对listTitle
个对象进行排序。这是我的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
行,我收到错误:
&#39;找不到“已排序”的超载情况。接受参数列表 输入&#39;([(List)],(_,_) - &gt; _)&#39;&#39;。
任何和所有帮助将不胜感激。
答案 0 :(得分:2)
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
转换的问题已经不那么严重了,但是对此进行了修改。
解决此问题的各种不同方法,但请尝试:
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
}