排序结构->二进制运算符'

问题描述 投票:-1回答:1

我有这个结构:

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
                }    

这给出了错误:

二进制运算符'

swift
1个回答
0
投票

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

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 ?? ""
}
© www.soinside.com 2019 - 2024. All rights reserved.