gpt4 book ai didi

来自协议(protocol)类型的 Swift associatedType - 怎么做?

转载 作者:可可西里 更新时间:2023-11-01 01:27:13 25 4
gpt4 key购买 nike

我在使用关联类型作为协议(protocol)时遇到问题:

protocol Searchable{    
func matches(text: String) -> Bool
}

protocol ArticleProtocol: Searchable {
var title: String {get set}
}

extension ArticleProtocol {
func matches(text: String) -> Bool {
return title.containsString(text)
}
}

struct FirstArticle: ArticleProtocol {
var title: String = ""
}

struct SecondArticle: ArticleProtocol {
var title: String = ""
}

protocol SearchResultsProtocol: class {
associatedtype T: Searchable
}

当我尝试实现搜索结果协议(protocol)时,出现编译问题:

“类型 SearchArticles 不符合协议(protocol) SearchResultsProtocol”

class SearchArticles: SearchResultsProtocol {
typealias T = ArticleProtocol
}

据我所知,这是因为 SearchArticles 类中的 T 不是来自具体类型(在该示例中为结构),而是来自协议(protocol)类型。

有没有办法解决这个问题?

提前致谢!

最佳答案

associatedtype不是占位符(协议(protocol)),而是具体类型。通过在类声明中添加泛型,您可以获得与此相同的结果......

class SearchArticles<V: ArticleProtocol>: SearchResultsProtocol {
typealias T = V
}

然后,当您使用 SearchArticles在您的应用周围,您可以声明 let foo = SearchArticles<FirstArticle>let foo = SearchArticles<SecondArticle>

关于来自协议(protocol)类型的 Swift associatedType - 怎么做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40908301/

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