【发布时间】:2021-08-04 05:45:38
【问题描述】:
我有以下struct 并希望按startTime 字段对会话中的项目进行排序。我完全不知道该怎么做。
我试过了:
let sortedArray = sessionsData?.items.sorted{ ($0["startTime"] as! String) < ($1["startTime"] as! String) }
但这只是给我一个关于没有下标成员的错误?
任何指点将不胜感激,谢谢。
public struct sessions: Decodable {
let status: String?
let start: Int?
let count: Int?
let items: [sessionInfo]?
let itemsCount: Int?
let multipart: Bool?
let startTime: Int?
let endTime: Int?
}
public struct sessionInfo: Decodable {
let name: String?
let datalist: String?
let sessionType: Int?
let status: Int?
let backupType: Int?
let startTime: Int?
let endTime: Int?
let owner: String?
let numOfErrors: Int?
let numOfWarnings: Int?
let flags: Int?
}
我尝试了以下方法,但出现错误:
var sortedArray = sessionsData?.items?.sorted(by: { (lhs, rhs) -> Bool in
return lhs.startTime < rhs.startTime
})
错误:
Binary operator '<' cannot be applied to two 'Int?' operands
【问题讨论】:
-
问题是默认情况下无法使用
<,>运算符比较选项。当startTimes 为nil或将startTime的类型更改为Int时,请自行定义返回值。 -
啊,谢谢你,大卫!
-
@FlatDog 所有可选字段都是一个很大的危险信号。您确定没有开始或结束时间、名称或其他任何内容的会话有意义吗?
-
是的,我正在考虑改变这一点,谢谢@Alexander。
-
自 Swift4(我认为)以来,比较选项不再可能。你可以这样写(在操场上测试): var sortedArray = sessionsData?.items?.sorted(by: { (lhs, rhs) -> Bool in return (lhs.startTime ?? 0)
标签: ios swift sorting comparator swift4