@G_r_i_n_v_i_c_h

Как передать имя struct в качестве параметра функции?

День добрый.

Есть метод типа:

static func fetch(url: String, completion: @escaping (Result<[Supplier], Error>) -> Void) {
        guard let url = URL(string: url) else { return }
        var urlRequest = URLRequest(url: url)
        urlRequest.httpMethod = "GET"
        self.setToken(urlRequest: &urlRequest, token: "6dc3d1de41126000d08a7ec4283e16d2ca13a203")
        
        URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in
            DispatchQueue.main.async {
                if let error = error {
                    completion(.failure(error))
                    return
                }
                guard let data = data else { return }
                do {
                    let suppliers = try JSONDecoder().decode([Supplier].self, from: data)
                    completion(.success(suppliers))
                } catch {
                    completion(.failure(error))
                }
                
                
            }
        }.resume()
    }


Хочу сделать его универсальным. Т.е. параметром передать какой конкретно массив страктов надо вернуть.
Типа того:

static func fetch(url: String, completion: @escaping (Result<[structname], Error>) -> Void) {
...
let resultSet = try JSONDecoder().decode([structname].self, from: data)
  • Вопрос задан
  • 79 просмотров
Решения вопроса 1
briahas
@briahas
ObjC, Swift, Python
Посмотрите в сторону Generic. Вроде бы это то что вам надо.

updated

Ага, я понял... пробуйте такое
func GetTools(currentURLRequest: String, completion:(Result<ToolDetailsSearchResult, Error>)->Void
    ...
    fetch(urlRequest: currentURLRequest) { (_ result: Result<ToolDetailsSearchResult, Error>) in
         ...
    }
}


Смысл проблемы в том, что вы не указывали итоговый тип переменной. Надо явно указать тип при использовании, тогда он понимает во что транслировать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы