0
votes

'valeur' est inaccessible en raison du niveau de protection 'interne'

Configuration de l'API pour openweathermap. Cependant, quand il s'agit de configurer ceci:

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

    }

J'obtiens l'erreur:

'valeur' est inaccessible en raison du niveau de protection 'interne'


2 commentaires

J'ai déjà rencontré ce problème, avez-vous essayé de rendre cette fonction publique?


comment faites-vous cela?


3 Réponses :


5
votes

Merci d'avoir essayé Alamofire 5! Cette erreur est un peu trompeuse, car le compilateur Swift essaie d'être utile et de vous informer qu'il existe une value propriété internal sur response.result laquelle vous ne pouvez pas accéder. Cependant, il s'agit d'une extension Alamofire interne, car nous sommes passés au type de Result fourni par la bibliothèque standard Swift dans Alamofire 5 beta 4. Le Result système n'offre pas la value et error propriétés d' error que le type de Result précédemment fourni par Alamofire. Ainsi, bien que nous ayons des extensions en interne pour nous fournir des fonctionnalités, elles n'existent pas publiquement pour être utilisées par votre application.

La solution ultime ici dépend de vous. Vous pouvez étendre Result vous-même pour offrir les propriétés (n'hésitez pas à utiliser l'implémentation Alamofire) ou vous pouvez vous passer des propriétés et switch sur la valeur response.result pour extraire la valeur de réponse. Je suggère d'utiliser switch pour le moment, car cela vous oblige à considérer le cas .failure .


1 commentaires

Cela a été changé dans Alamofire 5 beta 7: nos extensions internes n'utilisent plus les propriétés value / error , donc cette erreur ne devrait plus se produire. Au lieu de cela, vous devriez voir une erreur normale "aucune propriété de ce type".



0
votes

Dans la dernière beta 4 , Alamofire est passé à l'utilisation du nouveau type de résultat standard, de sorte que les propriétés de commodité que nous avions l'habitude d'avoir été rendues internes. Vous pouvez maintenant basculer le résultat comme ceci:

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

Ou vous pouvez créer des extensions similaires dans votre propre projet. Ils n'offriront plus les extensions publiquement.


0 commentaires

1
votes
switch response.result {
        
        case .success(let value):
            print("Alamo value: \(value)")
            break
        case .failure(let error):
            print("Alamo error: \(error)")
            break
        }

0 commentaires