我有这个结构:
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
}
这给出了错误:
二进制运算符'
您无法比较错误消息中所写的可选字符串。解开字符串,然后尝试比较。
self.hosts.sorted { lhs, rhs in
guard let lhsName = lhs.hostName, let rhsName = rhs.hostName else { return false }
return lhsName < rhsName
}
EDIT-上述解决方案不正确,因为它破坏了sort()
函数的可传递性,并且不适用于大量数据;感谢@Alexander-恢复莫妮卡的提示。
适当的解决方案是强制解包值不推荐或提供nil-coalescing
值,例如:
let sortedArray = self.hosts.sorted { lhs, rhs in
lhs.hostName ?? "" < rhs.hostName ?? ""
}