Ошибка пытается вернуть протокол связанный тип из методаIOS

Программируем под IOS
Ответить
Anonymous
 Ошибка пытается вернуть протокол связанный тип из метода

Сообщение Anonymous »

Мне нужно искать сущности (фотографии, альбомы и т. Д.), Используя API unsplash.com. Чтобы достичь повторного использования и не создавать новую функцию каждый раз, когда мне нужно искать новую сущность, я создал протокол: < /p>

Код: Выделить всё

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 можно использовать только с конкретным типом или база общих параметров"

Как исправить ошибку и что я делаю не так?

Подробнее здесь: https://stackoverflow.com/questions/595 ... rom-method
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»