楽天booksAPIで本の情報を取得したいのですが、
APIでの本の取得が終わる前に次の処理が走ってしまって上手くいきません。
実現したいことはデバックエリアに
テスト1→テスト2→テスト3→テスト4
の流れで表示させたいのですが、
現状では
テスト1→テスト2→テスト4→テスト3
の流れになってしまいます。
APIで取得したJSON解析のコードは実装済みです。
色々調べた結果、クロージャを用いた処理をするのだと思いますが実装方法がわかりません。
ご教授いただけたら幸いです。
よろしくお願いいたします。
実行結果
ViewControllet
1// 検索ボタンを押した時の処理 2func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { 3 view.endEditing(true) 4 if let seachWord = searchField.text { 5 let search = ScanText(searchWord: seachWord) 6 print("テスト1") 7 search.search() 8 print("テスト2") 9 var bookimageString = search.bookimageString 10 var bookTitleString = search.bookTitleString 11 var authorsString = search.authorsString 12 var priceString = search.priceString 13 print("テスト4") 14 } 15}
ScanSwift
1import Foundation 2import SwiftyJSON 3import Alamofire 4 5class ScanText { 6 7 var searchWord:String! = "" 8 9 var scanData = "" 10 var bookimageString = String() 11 var bookTitleString = String() 12 var authorsString = String() 13 var priceString = String() 14 15 var userID = String() 16 var userName = String() 17 18 19 init(searchWord:String) { 20 21 self.searchWord = searchWord 22 23 } 24 25 func search(){ 26 27 28 // エンコードする 29 let encordUrlString:String = searchWord.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)! 30 let url = "https://app.rakuten.co.jp/services/api/BooksBook/Search/20170404?format=json&title=(encordUrlString)&applicationId=1032673171825430477" 31 // let url = "https://app.rakuten.co.jp/services/api/BooksBook/Search/20170404?format=json&isbn=(scanData)&applicationId=1032673171825430477" 32 33 // Alamofireでhttpリクエストを送る 34 Alamofire.request(url, method: .get, parameters: nil, encoding: JSONEncoding.default).responseJSON {(response) in 35 36 switch response.result{ 37 case .success: 38 let json:JSON = JSON(response.data as Any) 39 40 // 本のサムネイル取得 41 var imageString = json["Items"][0]["Item"]["mediumImageUrl"].string 42 if imageString == nil{ 43 imageString = "" 44 } 45 // 本のタイトルを取得 46 var bookTitle = json["Items"][0]["Item"]["title"].string 47 if bookTitle == nil{ 48 bookTitle = "" 49 } 50 // 著者を取得 51 var authors = json["Items"][0]["Item"]["author"].string 52 if authors == nil{ 53 authors = "" 54 } 55 56 // 本の値段を取得 57 var intPrice = json["Items"][0]["Item"]["itemPrice"] 58 var price = intPrice.description 59 if price == nil { 60 price = "" 61 } 62 63 print("テスト3") 64 // 取得した情報を入れる 65 self.bookimageString = imageString! 66 self.bookTitleString = bookTitle! 67 self.authorsString = authors! 68 self.priceString = price 69 70 71 break 72 case .failure(let error): 73 print(error) 74 break 75 76 } 77 } 78 } 79}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/20 12:11
2020/01/21 00:04
2020/01/22 12:19
2020/01/23 00:38
2020/01/23 10:08