Swift中调用sorted(by:)出现‘Result of call to 'sorted(by:)' is unused’警告问题:数组按票数从高到低排序无效
解决Swift中
sorted(by:)结果未使用的警告问题 嘿,这个警告的根源很好理解——Swift里的sorted(by:)是非原地排序方法:它不会修改你原来的wallActionList数组,而是返回一个全新的、已经排好序的数组副本。你现在只是调用了这个方法,但没把返回的新数组赋值给任何变量,所以编译器才会提示你“结果未被使用”。
两种解决办法
根据你的需求选一种就行:
1. 直接修改原数组(原地排序)
如果你不需要保留原数组的原始顺序,直接用sort(by:)方法(注意是不带ed的版本),它会直接修改原数组,不需要接收返回值:
// 原地排序,直接修改wallActionList self.wallActionList.sort(by: { $0.upVote! > $1.upVote! })
2. 保留原数组,生成新的排序数组
如果想保留原数组的顺序,同时得到一个排好序的版本,就把sorted(by:)的返回值赋值给一个新变量:
// 生成新的排序数组,原数组不变 let sortedWallActions = self.wallActionList.sorted(by: { $0.upVote! > $1.upVote! }) // 之后用sortedWallActions做后续操作
额外优化:避免强制解包的崩溃风险
你的代码里用了$0.upVote!强制解包可选值,如果某个WallAction的upVote是nil,运行时会直接崩溃。建议用默认值来处理这种情况,比如把nil当作0来排序:
// 用??给可选值设置默认值,避免崩溃 self.wallActionList.sort(by: { ($0.upVote ?? 0) > ($1.upVote ?? 0) })
整理后的完整代码示例
struct WallAction { var upVote: Int? var downVote: Int? var noVote: String? } var wallActionList = [WallAction]() var up = 0 var down = 0 var noVote = "" // 用switch替代多个if,代码更清晰 for (_, wallActn) in wall.1["wallAction"] { switch wallActn["action"].stringValue { case "": noVote = "Vote" case "1": up += 1 case "0": down += 1 default: // 可以处理其他未预期的action值,这里暂时空实现 break } } let wallAct = WallAction(upVote: up, downVote: down, noVote: noVote) wallActionList.append(wallAct) // 推荐的原地排序写法(带可选值安全处理) wallActionList.sort(by: { ($0.upVote ?? 0) > ($1.upVote ?? 0) })
内容的提问来源于stack exchange,提问作者iDeveloper
相关产品推荐
相关产品推荐

