You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 04:53:14