“错误”;条件绑定的初始值设定项必须具有可选类型,而不是';字符串'&引用;正在尝试对Swift 5、NSTableView中的列进行排序

“错误”;条件绑定的初始值设定项必须具有可选类型,而不是';字符串'&引用;正在尝试对Swift 5、NSTableView中的列进行排序,swift,xcode,swift5,Swift,Xcode,Swift5,我收到错误条件绑定的初始值设定项必须具有可选类型,而不是第行的“字符串”: guard let id1 = p1.artist, let id2 = p2.artist else { return true } 关于如何消除这个错误有什么建议吗?谢谢大家! func setSortDescriptor() { let idDescriptor = NSSortDescriptor(key: "cellArtist", ascending: true) tab

我收到错误
条件绑定的初始值设定项必须具有可选类型,而不是第行的“字符串”:

guard let id1 = p1.artist, let id2 = p2.artist else { return true }
关于如何消除这个错误有什么建议吗?谢谢大家!

func setSortDescriptor() {
    let idDescriptor = NSSortDescriptor(key: "cellArtist", ascending: true)
    tableView.tableColumns[0].sortDescriptorPrototype = idDescriptor
}


func tableView(_ tableView: NSTableView, sortDescriptorsDidChange oldDescriptors: [NSSortDescriptor]) {
    guard let sortDescriptor = tableView.sortDescriptors.first else { return }
    sortRecords(ascending: sortDescriptor.ascending)
    tableView.reloadData()
}

func sortRecords(ascending: Bool) {
    myRecords.sort { (p1, p2) -> Bool in
        guard let id1 = p1.artist, let id2 = p2.artist else { return true }
        if ascending {
            return id1 < id2
        } else {
            return id2 < id1
        }
    }
}
    
func setSortDescriptor(){
让idDescriptor=NSSortDescriptor(键:“cellArtist”,升序:true)
tableView.tableColumns[0]。sortDescriptorPrototype=idDescriptor
}
func tableView(tableView:NSTableView,SortDescriptor IDChange OldDescriptor:[NSSortDescriptor]){
guard let sortDescriptor=tableView.sortDescriptors.first else{return}
sortRecords(升序:sortDescriptor.升序)
tableView.reloadData()
}
函数排序记录(升序:布尔){
myRecords.sort{(p1,p2)->Bool-in
guard let id1=p1.artist,let id2=p2.artist else{return true}
如果上升{
返回id1
您没有显示
p1
p2
的类型,但至少在一个属性上(如果它们是同一类型,可能两者都是),属性
artist
被定义为
字符串。要使用
guard let
if let
,绑定到的变量/属性必须是可选的(
字符串?

如果这两个都是非可选的
String
s,那么就没有理由执行
guard
语句,因为没有什么可绑定的内容--您可以直接在
p1.artist
p2.artist
上进行比较


更多关于可选绑定的阅读:

谢谢。成功了。我根本不需要警卫!!!:)@道格拉斯·布朗:你查过我昨天发给你的链接了吗?@LeoDabus是的。我让它工作了。现在我正试图让一个专栏可以点击:)我让它工作了;)但我的下一个问题是,我需要计算被单击的列的索引。哈哈,一个接一个。利奥,你知道那件事吗?我希望你很好!谢谢你的帮助。你昨天帮了大忙。。。只是在实现我的目标lol@LeoDabus如果我可以获得所单击列的索引,我将“tableView.tableColumns[0].sortDescriptorPrototype=idDescriptor”行更改为该索引而不是0,然后我可以使所有列正常工作。现在我有一个分类表。但我还有4个要走;)lol FUN:)@LeoDabus我回答了你昨晚用代码示例下载回答的另一个问题线程。谢谢你,顺便说一句!可能的副本: