2016-11-16 20 views
0

迅速3のための私のコードを変換した後、私はエラーを取得しています:迅速な3変換引き起こし(lldb)エラー `EXC_BAD_INSTRUCTION(コード= EXC_I386_INVOP、サブコード)= 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 

このラインas! (Any, Any) -> ComparisonResult)が私を与えています他の説明なしで(lldb)と言うエラーは誰でもここで何が間違っているのか説明できますか?そして、それはこのようなものだった変換前:

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 NSMutableArrayの

+1

なぜ厄介なコンパレータと 'NSMutableArray'ですか? Native Swift配列の型とソート機能ははるかに効率的です。 – vadian

答えて

0

as! (Any, Any) -> ComparisonResultを取り除くとAny代わりのAnyObjectに2つのパラメータを変更しています。

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) 
    } 
}) 

しかし、これにはまだいくつかの問題があります。コードパスごとに値がreturnではなく、オプションを適切に処理していません。以下はより良いでしょう:

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 
    } 
})