我尝试向Card
数组添加两种方法,这样我就可以调用cardArray.suitSort()
或cardArray.rankSort()
来执行具有相应比较功能的sortInPlace({})
括号之间。但是,在编译下面的代码时,我得到了错误"对成员sortInPlace"的不明确的引用。无论我是否离开self.
部分都会坚持下去。
extension MutableCollectionType where Generator.Element == Card {
mutating func suitSort() {
self.sortInPlace({SuitSorted($0,$1)})
}
mutating func rankSort() {
self.sortInPlace({RankSorted($0,$1)})
}
}
我怎样才能让它发挥作用,因此每次我想对sortInPlace({comparisonFunction($0,$1)})
进行排序时,我都不必使用Array<Card>
?
答案 0 :(得分:0)
我通过使用名为CardCollection的协议和与以下内容有些类似的代码解决了这个难题:
protocol CardCollection : RangeReplaceableCollectionType, CustomStringConvertible {
var collective : [Card] { get set }
}
extension CardCollection {
mutating func shuffleInPlace() {
collective.shuffleInPlace()
}
// This is where the generic sorter takes place
mutating func sortInPlace(sortFun: (Card, Card) -> Bool?=DisplaySorted) {
collective.sortInPlace({sortFun($0,$1)!})
}
mutating func sortBySuit() {
sortInPlace(SuitSorted)
}
mutating func sortByRank() {
sortInPlace(RankSorted)
}
mutating func sortForDisplay() {
sortInPlace(DisplaySorted)
}
}