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'
3 Réponses :
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
.
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".
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.
switch response.result { case .success(let value): print("Alamo value: \(value)") break case .failure(let error): print("Alamo error: \(error)") break }
J'ai déjà rencontré ce problème, avez-vous essayé de rendre cette fonction publique?
comment faites-vous cela?