2016-11-16 1 views
0

après avoir converti mon code pour 3 rapide je reçois une erreur:rapide 3 conversion provoquant (LLDB) Erreur `EXC_BAD_INSTRUCTION (code = EXC_I386_INVOP, sous-code) = 0x0`

noteObjects.sort (comparator: { (first : AnyObject, second : AnyObject) -> ComparisonResult in 

      if let f : String = (first as! RChannels).name! { 
      let s : String = (second as! RChannels).name! 

       return f.compare(s) 
      } 

     } as! (Any, Any) -> ComparisonResult) // error here 

cette ligne as! (Any, Any) -> ComparisonResult) me donne une erreur qui dit (lldb) sans autres descriptions n'importe qui peut expliquer ce qui ne va pas ici ?? et avant que c'était comme ça:

noteObjects.sortUsingComparator { (first : AnyObject, second : AnyObject) -> NSComparisonResult in 
     if let f : String = (first as! RChannels).name! { 
      let s : String = (second as! RChannels).name! 
      return f.compare(s) 
     } 
    } 

noteObjects est un NSMutableArray

+1

Pourquoi ce comparateur encombrant et «NSMutableArray»? Le type de tableau natif Swift et la fonction de tri sont beaucoup plus efficaces. – vadian

Répondre

0

Débarrassez-vous de as! (Any, Any) -> ComparisonResult et modifier les deux paramètres à Any au lieu de AnyObject.

noteObjects.sort(comparator: { (first : Any, second : Any) -> ComparisonResult in 
    if let f : String = (first as! RChannels).name! { 
     let s : String = (second as! RChannels).name! 

     return f.compare(s) 
    } 
}) 

Mais cela a encore quelques problèmes. Vous n'avez pas de valeur return pour chaque chemin de code et vous ne traitez pas correctement les options. Ce qui suit serait mieux:

noteObjects.sort(comparator: { (first : Any, second : Any) -> ComparisonResult in 
    if let f = (first as! RChannels).name, let s = (second as! RChannels).name { 
     return f.compare(s) 
    } else { 
     return .orderedSame 
    } 
})