gpt4 book ai didi

arrays - 不会为集合的元素推断协议(protocol)一致性

转载 作者:行者123 更新时间:2023-11-28 14:34:59 28 4
gpt4 key购买 nike

我有一组协议(protocol)可以在 UITableView 中显示一个元素:

protocol TableRepresentableRow {
var title: String { get }
var subtitle: String { get }
}

extension TableRepresentableRow {
var title: String {return ""}
var subtitle: String {return ""}
}

protocol TableRepresentableSection {
var title: String { get }
var count: Int { get }
subscript(index: Int) -> TableRepresentableRow {get}
}

extension TableRepresentableSection {
var title: String {
return ""
}
}

单个元素符合TableRepresentableRow 协议(protocol):

extension ServicesSummary.Service: TableRepresentableRow {
var title: String {
return serviceNumber
}
var subtitle: String {
return serviceUserName
}
}

我希望协议(protocol)一致性也能在 TableRepresentableSection 中推断出来,因为 ServicesSummary.ServiceTableRepresentableRow 但是,这不会发生:

extension Array: TableRepresentableSection where Element == ServicesSummary.Service {
// Error: the compiler requires me to add subscript too, while it should be inferred
subscript(index: Int) -> TableRepresentableRow {
<#code#>
}

var title: String {
return first?.businessType.rawValue.uppercased() ?? ""
}
}

为什么会出现此错误?

更新:协议(protocol)组合也不起作用: enter image description here

最佳答案

要解决此问题,请将元素类型检查更改为仅协议(protocol):

改变:

where Element == ServicesSummary.Service

到:

where Element == TableRepresentableRow

整个扩展:

extension Array: TableRepresentableSection where Element == TableRepresentableRow {
var title: String {
return first?.businessType.rawValue.uppercased() ?? ""
}
}

关于arrays - 不会为集合的元素推断协议(protocol)一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50949283/

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