いつもお世話になっております。
iosアプリ開発の勉強中です。
Alamofireを使ったapi連携jsonデータ取得の勉強中です。(xcode 11.5 swift5.1 Alamofire 5.2.1)
以下サイトを参考にしています。
https://qiita.com/uhooi/items/c0e083f916dc516175bd
エラーがでて、解決しません。(添付画像あり)
swift
11) 2private var addresses = AddressModel? 3//以下エラー 4"Expected member name or constructor call after type name" 5 62) 7self.addresses = try JSONDecoder().decode(AddressModel.self, from: data) 8//以下エラー 9 "Cannot assign value of type 'AddressModel' to type 'AddressModel?.Type'" 10
構造体をインスタンス化するには、初期化が必要と聞きましたが、?でよいのでしょうか?
AddressModel.self は type(型?)を指定し、インスタンス化したaddressesに格納しているような気がするのですが、
ここで、型が違うと指摘されている気がします。
いかがでしょうか?
以下viewcontroller
swift
1import UIKit 2import Alamofire 3 4 5class ViewController: UIViewController { 6 @IBOutlet weak var jsonText: UITextView! 7 8// struct AddressModel: Codable { 9// var results: [Result] 10// 11// struct Result: Codable { 12// var address1: String 13// var address2: String 14// var address3: String 15// var kana1: String 16// var kana2: String 17// var kana3: String 18// } 19// 20// } 21 22 override func viewDidLoad() { 23 super.viewDidLoad() 24 // Do any additional setup after loading the view. 25 getAddress(zipCode: "2790031") 26 } 27 private var addresses = AddressModel? 28 29 30 private func getAddress(zipCode: String) { 31 let baseUrl = "http://zipcloud.ibsnet.co.jp/api/" 32 let searchUrl = "(baseUrl)search" 33 let parameters: [String: Any] = ["zipcode": zipCode] 34 let headers: HTTPHeaders = ["Content-Type": "application/json"] 35 AF.request(searchUrl, method: .get, parameters: parameters, encoding: URLEncoding(destination: .queryString), headers: headers).responseJSON { 36 response in 37 guard let data = response.data else { 38 return 39 } 40 do { 41 self.addresses = try JSONDecoder().decode(AddressModel.self, from: data) 42 } catch let error { 43 print("Error: (error)") 44 } 45 } 46 47 48 } 49 50}
以下MVCモデルとして、modelを別ファイルで作成
構造体として、jsonデータをcodableで書きました。
swift
1import Foundation! 2 3struct AddressModel: Codable { 4 var results: [Result] 5 6 struct Result: Codable { 7 var address1: String 8 var address2: String 9 var address3: String 10 var kana1: String 11 var kana2: String 12 var kana3: String 13 } 14 15}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/22 13:16
2020/06/22 20:18
2020/06/23 15:22