2つのアイテムの文字列値を比較して配列を並べ替えようとしています。プロパティの値は数値ですが、String型です。それらをIntに変換し、どちらが大きいかを確認するにはどうすればよいですか。現在のコードは次のようになります。
libraryAlbumTracks = tracks.sorted {
$0.position!.compare($1.position!) == .orderedAscending
}
しかし、「13」のような値は「2」の前に来ます。これは文字列だからです。値をIntにキャストしようとしましたが、オプションであるため、
operand ">" cannot be applied to type Int?
というエラーが表示されますソートされた関数でこれを回避するにはどうすればよいですか?
回答 2 件
libraryAlbumTracks = tracks.sorted { guard let leftPosition = $0.position, let leftInt = Int(leftPosition), let rightPosition = $1.position, let rightInt = Int(rightPosition) else { return false } return leftInt > rightInt }
関連した質問
- SwiftUIでアラートを作成する
- ネストされたforループ内のこのsqliteクエリが複数の結果を返さないのはなぜですか?
- Xcode 12(Swift 53)以降、ネストされたコレクションビューはセルの選択に応答しません
- 座標に向かう方向を見つける
- リアルタイムのテキスト認識のためにAppleのビジョンフレームワークを使用する方法を知っている人はいますか?
- SwiftUIlistRowBackgroundが機能していないようです
- RxSwift)1つの観測可能な2回のサブスクライブが機能しない
- TableView SwiftでネストされたJSON配列を解析する方法は?
- ファイルが「存在しない」ため、SwiftMoveItemが失敗する
- オブジェクト内のオブジェクトでCodableエンコードを使用する方法
numeric
を提供するcompare
を使用する場合のオプション 。これにより、数字を含む文字列が適切にソートされます。また、文字列の一部に実際に数字がない場合や、文字列に数字と数字以外の組み合わせがある場合にも機能します。これにより、文字列を
Int
に変換する必要がなくなります 。注意:また、
position
を強制的にアンラップすることも避けてください 。それらを強制的にアンラップしても安全な場合はオプションにしないでください。または、安全にアンラップするか、または??
を使用してください。 それらを比較するときに適切なデフォルトを提供します。