2017-11-30 7 views
0

これは、tableViewのタイムスタンプの各セルで配列をソートするためのコードです。配列のソートエラー: "2進演算子 '<'は2つの 'Int?'に適用できません。オペランド "

self.ProjectsArray.sorted(by: { (project, project2) -> Bool in  
    return project.timestamp?.intValue < project2.timestamp?.intValue  
    }) 

アレイを並べ替えるより良い方法はありますか?私は間違って何をしているのですか?

+0

問題は、あなたがOptionalsを比較しようとしているということです。変数のどれかが 'nil'であるときに変数を比較する方法を定義する必要があります。 –

答えて

0

EDIT - あなたのコメントに応じて、適切に並べ替える必要がありますので、並べ替えるように更新しています。

あなたのタイムスタンプ変数はOptionalあるので、あなたはIntnil、またはnilnilを比較することができます。これらを安全にアンラップし、nilの場合は並べ替え順序を指定するか、またはnil-coalescing演算子を使用してnilの値をデフォルトのIntとして扱うことができます。

オプションアンラップ:

self.ProjectsArray.sort(by: { (project, project2) -> Bool in 
    if let timestamp1 = project.timestamp, let timestamp2 = project2.timestamp { 
     return timestamp1.intValue < timestamp2.intValue 
    } else { 
     //At least one of your timestamps is nil. You have to decide how to sort here. 
     return true 
    }  
}) 

ナシ-合体演算子:

self.ProjectsArray.sort(by: { (project, project2) -> Bool in 
    //Treat nil values as 0s and sort accordingly  
    return (project.timestamp?.intValue ?? 0) < (project2.timestamp?.intValue ?? 0)  
}) 
+0

返されたコードの「セクション」の両方に警告が表示されます。「ソートされた(by :)の結果は使用されません」@creeperspeak –

+0

はい、何もせずに単純に配列を並べ替えているためです。 "sort in place"しようとしている場合は、 'sort by(' by 'sort(by ')、元の配列をソートします。 – creeperspeak

+0

正直なところ、あなたのコード@creeperspeakと混乱していますが、このコードブロックの後に配列を並べ替えるべきですか? –

関連する問題