我尝试通过比较两个项目的字符串值来对数组进行排序,该属性的值是一个数字,但类型为String。如何将它们转换为Int并检查哪个更大。目前的代码看起来像这样。
libraryAlbumTracks = tracks.sorted {
$0.position!.compare($1.position!) == .orderedAscending
}
但是像" 13"来之前" 2"因为它是一个字符串。我试图将值转换为Int,但因为它们是可选的,我得到operand ">" cannot be applied to type Int?
的错误
请问如何在排序函数中解决这个问题?
答案 0 :(得分:4)
使用numeric
时提供compare
选项。这将正确排序包含数字的字符串,如果某些字符串实际上没有数字或字符串具有数字和非数字的组合,它也会起作用。
libraryAlbumTracks = tracks.sorted {
$0.position!.compare($1.position!, options: [ .numeric ]) == .orderedAscending
}
这样就无需将字符串转换为Int
。
注意:您还应该避免强制解包position
。如果可以安全地强制拆开它们,或者安全地展开它们,或者在比较它们时使用??
提供适当的默认值,要么不要使它们成为可选项。
答案 1 :(得分:1)
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
}