2015-01-07 1 views
1

Эй люди StackOverflow,Использование sortedArrayUsingSelector в Swift

Я реализовал этот класс в скор:

class PCCountedColor { 

    var color:UIColor 
    var count:Int 

    init (color:UIColor, count:Int) 
    { 
     self.color = color; 
     self.count = count; 
    } 

    func compare(object:PCCountedColor) -> NSComparisonResult 
    { 
     if (self.count < object.count) 
     { 
      return NSComparisonResult.OrderedDescending 
     } 
     else if (self.count == object.count) 
     { 
      return NSComparisonResult.OrderedSame 
     } 

     return NSComparisonResult.OrderedAscending 
    } 
} 

Тогда у меня есть NSMutableArray, который заполняется объектами выше класса:

var sortedColors:NSMutableArray = [] 
var container:PCCountedColor = PCCountedColor(color:curColor, count: colorCount) 
sortedColors.addObject(container) 

После этого я стараюсь, чтобы этот массив отсортирован по специальной функции в вышеуказанном классе:

sortedColors.sortedArrayUsingSelector(Selector("compare:")) 

Но все это я получаю ошибку:

SwiftColorArt[1584:42892] *** NSForwarding: warning: object 0x7fd391b25a50 of class 'SwiftColorArt.PCCountedColor' does not implement methodSignatureForSelector: -- trouble ahead Unrecognized selector -[SwiftColorArt.PCCountedColor compare:]

Я новичок в Swift и уже проверили Apple's official documentation which can be found here.

Я попробовал несколько вариантов синтаксиса (добавление «:» или удалить их, проход имя функции в виде строки или нет ... а также различные комбинации), но ни одна из них не помогла.

Так что в отчаянии я обращаюсь к вам за помощью.

С наилучшими пожеланиями,

Jan

+0

Возможно, такая же проблема, как здесь: http://stackoverflow.com/questions/24415662/object-x-of-class-y-does-not-implement-methodsignatureforselector-in-swift. –

+0

Вы должны *** действительно *** использовать функцию 'sort' Swift [https://developer.apple.com/library/ios/documentation/General/Reference/SwiftStandardLibraryReference/Array.html#//apple_ref/ DOC/UID/TP40014608-СН5-SW48). – akashivskyy

ответ

3

"SwiftColorArt.PCCountedColor' does not implement methodSignatureForSelector: -- trouble ahead Unrecognized selector -[SwiftColorArt.PCCountedColor compare:]"

Сообщение об ошибке говорит вам, что делать. Сделайте этот класс подклассом NSObject, и все будет хорошо.

+0

Чтобы быть справедливым, это не * буквально * сказать, что ...: P – akashivskyy

+0

Хорошо, ну, это говорит _me_, что делать. :) Но на самом деле, я согласен с вами, @akashivskyy - OP не должен называть этот метод в первую очередь, если его можно избежать. Swift имеет отличные возможности для сортировки массива. – matt

+0

Спасибо, что помогли! В настоящее время я пытаюсь научиться быстро, поместив https://github.com/fleitz/ColorArt (который написан на Objective-C, который я также не знаю) быстро. @akashivskyy - Я обязательно посмотрю на это! – Jan