簡體   English   中英

嘗試從方法返回協議關聯類型時出錯

[英]Error trying to return protocol associated type from method

我需要使用 unsplash.com 搜索 API 搜索實體(照片、相冊等)。 為了達到可重用性並且不必每次需要搜索新實體時都創建新函數,我創建了一個協議:

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 }
}

以及符合該協議的結構:

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 協議的結構或類:

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 ) {
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM