bugfix> ios > 投稿

2つのアイテムの文字列値を比較して配列を並べ替えようとしています。プロパティの値は数値ですが、String型です。それらをIntに変換し、どちらが大きいかを確認するにはどうすればよいですか。現在のコードは次のようになります。

libraryAlbumTracks = tracks.sorted {
            $0.position!.compare($1.position!) == .orderedAscending
        }

しかし、「13」のような値は「2」の前に来ます。これは文字列だからです。値をIntにキャストしようとしましたが、オプションであるため、 operand ">" cannot be applied to type Int? というエラーが表示されますソートされた関数でこれを回避するにはどうすればよいですか?

回答 2 件
  • numeric を提供する   compare を使用する場合のオプション 。これにより、数字を含む文字列が適切にソートされます。また、文字列の一部に実際に数字がない場合や、文字列に数字と数字以外の組み合わせがある場合にも機能します。

    libraryAlbumTracks = tracks.sorted {
        $0.position!.compare($1.position!, options: [ .numeric ]) == .orderedAscending
    }
    
    

    これにより、文字列を Int に変換する必要がなくなります 。

    注意:また、 position を強制的にアンラップすることも避けてください 。それらを強制的にアンラップしても安全な場合はオプションにしないでください。または、安全にアンラップするか、または ?? を使用してください。  それらを比較するときに適切なデフォルトを提供します。

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

あなたの答え