あなたは(==
を使用したことを除いて)直接2つの値を比較することはできませんオプションです。したがって、欠落しているボリューム値と、別の欠損ボリューム値または有効なボリューム値とを比較することが何を意味するのかを判断する必要があります。
単純なままにしたい場合は、不足している音量値をゼロとして扱うことができます。次に、あなたのコードは次のようになります。
self.market.sort { ($0.volume ?? 0) > ($1.volume ?? 0) }
最後に、より複雑なバージョンでしょう常にソートnilのボリューム値:
self.market.sort {
if let v1 = $0.volume {
if let v2 = $1.volume {
// Both values exist
return v1 > v2
} else {
// there is no v2 - treat v1 as < v2
return false
}
} else {
if let v2 = $1.volume {
// there is no v1 - treat v2 as < v1
return true
} else {
// both are nil
return true
}
}
}
$0.volume
は関係なく、$1.volume
の値のnil
ある場合true
がいることを、返されますので、次のように減らすことができます:
self.market.sort {
if let v1 = $0.volume {
if let v2 = $1.volume {
// Both values exist
return v1 > v2
} else {
// there is no v2 - treat v1 as < v2
return false
}
} else {
return true
}
}
もう一つの選択肢は、 2つのプロパティはオプションです。 JSONデータを解析する際に、どちらかの値が不足している場合は、有効でないと主張できるので、単にその市場をスキップしてください。
なぜプロパティはオプションですか?あなたは実際に名前のない、またはボリュームのないマーケットを持つことができますか? – rmaddy
私はjsonから値を取得する可能性がありますが、いくつかのプロパティにapiがnilを返す可能性がありますが、まずオプションのバインディングを使用してループを行い、ボリュームとマーケット名を持つすべてのオブジェクトを取得してから新しい配列を並べ替えて –