
[code]

    import UIKit
    import GoogleMaps
    import Alamofire
    import SwiftyJSON
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view.
    
            super.viewDidLoad()
            // Do any additional setup after loading the view.
            // Create a GMSCameraPosition that tells the map to display the
            // coordinate -33.86,151.20 at zoom level 6.
            let camera = GMSCameraPosition.camera(withLatitude: 35.665751, longitude: 139.728687, zoom: 6.0)
            let mapView = GMSMapView.map(withFrame: self.view.frame, camera: camera)
            self.view.addSubview(mapView)
    
            // Creates a marker in the center of the map.
            let marker = GMSMarker()
            marker.position = CLLocationCoordinate2D(latitude: 35.665751, longitude: 139.728687)
            marker.title = "六本木"
            marker.snippet = "東京都港区六本木７丁目４−１"
            marker.map = mapView
    
            AF.request("https://map.yahooapis.jp/search/local/V1/localSearch?cid=d8a23e9e64a4c817227ab09858bc1330&lat=35.662654694078626&lon=139.73135330250383&dist=2&query=%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3&appid=dj00aiZpPWdzNkFwb2NZRWxBbiZzPWNvbnN1bWVyc2VjcmV0Jng9MjY-&output=json").responseJSON { response in
    
                if let jsonObject = response.result.value {
                    let json = JSON(jsonObject)
                    let features = json["Feature"]
                    // If json is .Dictionary
                    for (key,subJson):(String, JSON) in json {
                       // Do something you want
                        let name = subJson["Name"].stringValue
                        let address = subJson["Property"]["Address"].stringValue
                        let coordinates = subJson["Geometry"]["Coordinates"].stringValue
                        let coordinatesArray = coordinates.split(separator: ",")
                        let lat = coordinatesArray[1]
                        let lon = coordinatesArray[0]
                        let latDouble = Double(lat)
                        let lonDouble = Double(lon)
    
                        let marker = GMSMarker()
                        marker.position = CLLocationCoordinate2D(latitude: latDouble, longitude: lonDouble)
                        marker.title = name
                        marker.snippet = "東京都港区六本木７丁目４−１"
                        marker.map = mapView
                    }
                }
            }
    
        }
    
    
    }
    
[/code]


CC BY-SA 4.0
2020-05-08T04:45:49.493
66418
2022-11-09T08:03:55.447
2020-05-08T04:49:20.417
32986
40051
question
swift
３３行目のvalueにエラーが出ます→Value of type 'Result<Any, AFError>' has no member 'value'


エラーメッセージが示しているように`response.result`は`Result<Any,
AFError>`型であり、`Result`型には`value`と言うプロパティがないためエラーになっています。

従って、例えば次のようなコードならコンパイルが通るかと思うのですが、いかがでしょうか?

[code]

                if let jsonObject = response.result.value {
    
[/code]

↓

[code]

                if case .success(let jsonObject) = response.result {
    
[/code]

(`Result`型から成功時の値を取り出す標準的なやり方。)

[最新のソース](https://github.com/Alamofire/Alamofire/blob/master/Source/ResponseSerialization.swift)を見る限り`responseJSON`メソッド用の完了ハンドラは`AFDownloadResponse<Any>`を受け取るようになっており、[`AFDownloadResponse`型には`value`と言うプロパティが存在](https://github.com/Alamofire/Alamofire/blob/master/Source/Response.swift)します。そちらを使ってもいいのですが、今後Swift用のライブラリでは`Result`型は多用されるでしょうから、慣れておいた方が良いでしょう。

私自身はAlamofireなんてものは使ったことがないのですが、バージョンによりコロコロとAPIの使い方が変わっていっているようです。ご自身が使用するバージョンにあったコード例を見つけるようにしてください。

またSwiftyJSONは、(少なくとも英語版stackoverflowでは)「古臭いので使わない方が良い」と言う人も多いです。ご質問のようなデータを扱うなら、`Codable`の活用も考えられた方が良いでしょう。


CC BY-SA 4.0
2020-05-09T16:42:51.733
66468
2020-05-09T16:42:51.733
13972
66418
answer