gpt4 book ai didi

ios - 尝试从方法返回协议(protocol)关联类型时出错

转载 作者:行者123 更新时间:2023-12-01 18:35:49 25 4
gpt4 key购买 nike

我需要使用 unsplash.com 搜索 API 搜索实体(照片、相册等)。为了达到可重用性并且不必在每次需要搜索新实体时都创建新函数,我创建了一个协议(protocol):

protocol SearchApiResource {

associatedtype ModelType: Decodable

var methodPath: String { get }

var searchTerm: String { get set }

var pageNumber: Int { get set }

var parameters: [String: String] { get }

var url: URL { get }
}

以及符合该协议(protocol)的结构:
struct SearchPhotoResource: SearchApiResource {

typealias ModelType = Photo

var methodPath = "/search/photos"

var searchTerm = String()

var pageNumber = Int()

let itemsPerPage = 30

let accessKey = "93e0a185df414cc1d0351dc2238627b7e5af3a64bb228244bc925346485f1f44"

var parameters: [String: String] {
var params = [String: String]()
params["query"] = searchTerm
params["page"] = String(pageNumber)
params["per_page"] = String(itemsPerPage)
params["client_id"] = accessKey
return params
}

var url: URL {
var components = URLComponents()
components.scheme = "https"
components.host = "api.unsplash.com"
components.path = methodPath
components.queryItems = parameters.map {URLQueryItem(name: $0, value: $1)}
return components.url!
}

}

现在我想创建一个函数来接受符合 SearchApiResource 协议(protocol)的结构或类:
func searchForItem(resource: SearchApiResource, searchTerm: String, pageNumber: Int, completion: @escaping (SearchApiResource.ModelType) -> Void ) {
}

但我收到一个错误:
“关联类型 'ModelType' 只能与具体类型或泛型参数库一起使用”

如何修复错误,我做错了什么?

最佳答案

照错误说的做 - 使用 SearchApiResource作为通用参数库。

func searchForItem<T: SearchApiResource>(resource: T, searchTerm: String, pageNumber: Int, completion: @escaping (T.ModelType) -> Void ) {
}

关于ios - 尝试从方法返回协议(protocol)关联类型时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59518531/

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