(環境)
xcode:11.3
version 5.1.3
(参考文献)
「たった2日でマスターできるIPhoneアプリ開発集中講座 Xcode 11 Swift5 対応」
2020年1月20日 初版第二刷発行
著者: 藤 治仁・小林 加奈子・小林 由憲
発行人: 片柳 秀夫
編集人:三浦 聡
発行所:ソシム株式会
※該当ページ:394
下記のコードでhereの箇所のselfがわからずに質問させていただきました。
let json = try decoder.decode(ResultJson.self, from: data!)//here
外部から取得したJson形式のデータを、あらかじめ準備した配列ResultJson
に格納させることを企図したコードであると理解しているのですが、Swift以外の言語で非コンパイル型の言語を経験してきた前提からするととても違和感があります。
当該コードではcodable
のプロトコルを用いることで、取得したJson
形式のデータをResultJson
に格納できる動作であると理解いたしました。
仮にその様な動作であるとしたら、.selfにはどの様な意味があるのでしょうか?
準備したResultJson
インスタンス自身(self)に取得したJson形式のdata1を入れる???単純に意味がわからないのですが、
例えばわざわざ配列に要素を格納する際に
let ary = [1,2,3]
ary.self.append(4)
なんてことは当然しないと思うのですが、(感覚的にtry decoder.decode(ResultJson, from: data!))
配列の要素に追加という行為にかかわらず、なぜこの場合にはselfが必要で、実際にどの様な意味なのかご存知の方がいらっしゃれば教えてください。
よろしくお願い申し上げます。
swift
1 2import UIKit 3 4class ViewController: UIViewController, UISearchBarDelegate{ 5 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 view.endEditing(true) 9 // Do any additional setup after loading the view. 10 searchText.delegate = self 11 searchText.placeholder = "お菓子の名前を入力してください" 12 } 13 14 func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { 15 view.endEditing(true) 16 if let searchWord = searchBar.text{ 17 print(searchWord) 18 searchOkashi(keyword: searchWord) 19 } 20 } 21 22 struct ItemJson: Codable { 23 let name : String? 24 let maker : String? 25 let url: URL? 26 let image: URL? 27 } 28 29 struct ResultJson: Codable { 30 let item: [ItemJson]? 31 } 32 33 func searchOkashi(keyword : String){ 34 guard let keyword_encode = keyword.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else { 35 return 36 } 37 guard let req_url = URL(string: "https://www.sysbird.jp/webapi/?apikey=guest&format=json&keyword=(keyword_encode)&max=10&order=r") else { 38 return 39 } 40 print(req_url) 41 42 let req = URLRequest(url: req_url) 43 let session = URLSession(configuration: .default, delegate: nil, delegateQueue: OperationQueue.main) 44 let task = session.dataTask(with: req, completionHandler: { 45 (data, resopse, error) in 46 session.finishTasksAndInvalidate() 47 48 do{ 49 let decoder = JSONDecoder() 50 let json = try decoder.decode(ResultJson.self, from: data!)//here 51 print(json) 52 }catch{ 53 print("errorが出ました") 54 } 55 }) 56 task.resume() 57 } 58 59 @IBOutlet weak var searchText: UISearchBar! 60 @IBOutlet weak var tableView: UITableView! 61} 62 63
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/21 08:18