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

Swift中如何根据User对象的userName参数对对象数组排序?

解决Swift User数组按userName排序的问题

嘿,我看你这里的问题主要出在两个小细节上,咱们来一步步修正:

1. 首先纠正属性名错误

你的User类里定义的是userName属性,但你写的排序代码里用了$0.name!——这里的name根本不是User类的成员,编译器肯定会报错。首先要把name改成userName。

2. 避免强制解包可选值的风险

直接用!强制解包userName很危险,如果数组里有某个User对象的userName是nil,运行时会直接崩溃。推荐用更安全的方式处理可选值:

方式一:用空合并运算符处理默认值

如果想把userName为nil的对象统一排到最后(或者最前,取决于空字符串的比较逻辑),可以这样写:

userArray = userArray.sorted(by: { ($0.userName ?? "") < ($1.userName ?? "") })

这里?? ""表示如果userName是nil,就用空字符串来参与比较,既避免崩溃,又能保证排序逻辑的一致性。

方式二:更严谨的可选值分支处理

如果你想明确控制nil值的排序位置(比如把无userName的放到最后),可以用switch分支做精细化处理:

userArray = userArray.sorted {
    switch ($0.userName, $1.userName) {
    case (let a?, let b?):
        // 两个对象都有userName,直接比较字符串
        return a < b
    case (nil, _):
        // 第一个对象无userName,排到后面,返回false
        return false
    case (_, nil):
        // 第二个对象无userName,第一个排前面,返回true
        return true
    }
}

测试验证

我用你给出的示例数据创建了User数组测试,用上面的代码排序后,得到的结果完全符合你的预期:
[(Amar, S, AmarS, 3),(Prema, A, PremaA, 2),(Shyam, M, ShayamM, 1)]

内容的提问来源于stack exchange,提问作者Lavanya v gowda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:50:12