gpt4 book ai didi

swift - 排序结构 -> 二元运算符 '<' 不能应用于两个 'String?' 操作数

转载 作者:行者123 更新时间:2023-11-30 10:27:54 26 4
gpt4 key购买 nike

我有这个结构:

struct HostModel {
var hostName: String?
var hostPhoneNumber: String?
var hostEmail: String?
}

var hosts = [HostModel]()

这是通过从 Firebase 数据库下载来填充的。

//Getting the data....     


let hostData = HostModel(hostName: dict["hostName"] as? String, hostPhoneNumber: dict["hostPhoneNumber"] as? String, hostEmail: dict["hostEmail"] as? String)
self.hosts.append(hostData)

一切都很好,直到我尝试对结构进行排序:

self.hosts.sorted { (lhs, rhs) -> Bool in
return lhs.hostName < rhs.hostName
}

这给出了错误:

Binary operator '<' cannot be applied to two 'String?' operands

最佳答案

您无法比较错误消息中所写的可选字符串。打开字符串,然后尝试比较。

self.hosts.sorted { lhs, rhs in
guard let lhsName = lhs.hostName, let rhsName = rhs.hostName else { return false }
return lhsName < rhsName
}

编辑 - 上述解决方案是不正确的,因为它破坏了 sort() 函数的传递性,并且不适用于大型数据集;感谢@Alexander - 恢复莫妮卡的指出。

正确的解决方案是强制解包不推荐的值或提供一个nil-coalescing值,如下所示:

let sortedArray = self.hosts.sorted { lhs, rhs in
lhs.hostName ?? "" < rhs.hostName ?? ""
}

关于swift - 排序结构 -> 二元运算符 '<' 不能应用于两个 'String?' 操作数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59751315/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com