«значение» недоступно из-за «внутреннего» уровня защиты - PullRequest
0 голосов
/ 03 апреля 2019

Настройка API для openweathermap.Однако, когда дело доходит до настройки:

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        let location  = locations[0]
        lat = location.coordinate.latitude
        lon = location.coordinate.longitude
        AF.request("http://api.openweathermaps.org/data/2.5/weather?lat=\(lat)&lon=\(lon)&appid=\(apiKey)&units=metric").responseJSON {
            response in
            self.activityIndicator.stopAnimating()
            if let responseStr = response.result.value {
                let jsonResponse = JSON(responseStr)
                let jsonWeather  = jsonResponse["weather"].array![0]
                let jsonTemp = jsonResponse["main"]
                let iconName =  jsonWeather["icon"].stringValue
            }
        }

    }

я получаю ошибку:

«значение» недоступно из-за «внутреннего» уровня защиты

Ответы [ 2 ]

4 голосов
/ 03 апреля 2019

Спасибо, что попробовали Alamofire 5! Эта ошибка немного вводит в заблуждение, поскольку компилятор Swift пытается помочь вам и сообщает, что есть свойство internal value в response.result, к которому вы не можете получить доступ. Однако это внутреннее расширение Alamofire, поскольку мы перешли к типу Result, предоставленному стандартной библиотекой Swift в бета-версии Alamofire 5 4. Система Result не предлагает value и error свойств, которые ранее предоставил Alamofire тип Result. Поэтому, хотя у нас есть внутренние расширения для обеспечения функциональности, они не существуют публично для использования вашим приложением.

Окончательное решение здесь зависит от вас. Вы можете расширить Result, чтобы предлагать свойства (не стесняйтесь использовать реализацию Alamofire), или вы можете обойтись без свойств и switch сверх значения response.result, чтобы извлечь значение ответа. Я бы предложил использовать switch на данный момент, так как это заставит вас рассмотреть случай .failure.

0 голосов
/ 15 июля 2019

В последней версии beta 4 Alamofire переключился на использование нового стандартного типа Result, поэтому удобные свойства, которые мы раньше использовали, стали внутренними. Теперь вы можете переключать результат так:

switch response.result {
    case let .success(value): ...
    case let .failure(error): ...
}

Или вы можете сделать аналогичные расширения в своем собственном проекте. Они больше не будут предлагать расширения публично.

...