2016-03-19 5 views
0

Каков правильный способ сортировки типичного набора в быстром?Сортировка общего набора в swift

class CustomSet<T: Hashable>: NSObject { 
    var items: Set<T> 

    init(_ items: [T]) { 
     self.items = Set(items) 
    } 

    var toSortedArray: [T] { 
     //Error: Binary operator '<' cannot be applied to two 'T' operands 
     return items.sort{ (a: T, b: T) -> Bool in return a < b} 
    } 
} 

Xcode версии 7.1 бета (7B60), это оболочка вокруг Swifts Set типа.

items.sort{$0 < $1} не работает

Cannot invoke 'sort' with an argument list of type '((_, _) -> _)'.

Но работает в xcrun swift

1> let s = Set([4,2,3,4,6]) 
s: Set<Int> = { 
    [0] = 6 
    [1] = 2 
    [2] = 4 
    [3] = 3 
} 
    2> s.sort{$0 < $1} 
$R0: [Int] = 4 values { 
    [0] = 2 
    [1] = 3 
    [2] = 4 
    [3] = 6 
} 

ответ

1

Вы должны ограничить свой общий заполнитель, чтобы соответствовать Сопоставимые (а также Hashable, что вы уже делаете). В противном случае, как говорится в сообщении об ошибке, мы не можем гарантировать, что применим <.

class CustomSet<T: Hashable where T:Comparable>: NSObject { 

Ваш xcrun пример работает, потому что Int делает соответствует Сопоставимые.

+0

Это было. Я попробовал 'class CustomSet ' –

+0

Причина '' не работает, так это то, что это означает два заполнителя, один из которых называется 'T', один называется' Comparable'. Единственный способ сделать несколько ограничений - это предложение 'where'. См. Раздел «Дополнительные ограничения» моей онлайн-книги Swift: http://www.apeth.com/swiftBook/ch04.html#_additional_constraints – matt

Смежные вопросы