前提・実現したいこと
SwiftUI
で、API
接続でデータを取得し利用するアプリを開発しています。
SwiftUI
で開発中のアプリから、API
接続でGET
の方法でデータを取得する際に、検索する値が英語の場合、対象のデータを取得することができますが、検索する値を日本語にするとデータを取得することができません。
例えば、以下のtitle
フィールドを部分一致の条件とした場合:
title: "SwiftUI初学者のための入門書"
こちらのように、パラメーターを英語にすると値を取得できます。
http://sample.com/api/books/?title=SwiftUI
しかし、パラメーターを日本語にすると値が取得できません。
http://sample.com/api/books/?title=初学者
以下のようなコードで値を取得する場合、どのように編集すれば良いでしょうか?
該当のソースコード
swift
1func fetchBookSearch(searchWord:String) { 2 3 let endpoint = "http://sample.com/api/books/?title=(searchWord)" 4 5 guard let url = URL(string: endpoint) else { 6 print("Error: cannot create URL") 7 return 8 } 9 10 let urlRequest = URLRequest(url: url) 11 let config = URLSessionConfiguration.default 12 let session = URLSession(configuration: config) 13 14 let task = session.dataTask(with: urlRequest) { 15 (data, response, error) in 16 17 guard error == nil else { 18 return 19 } 20 21 guard let responseData = data else { 22 return 23 } 24 25 DispatchQueue.main.async { 26 do{ 27 self.Infos = try JSONDecoder().decode([Info].self, from: responseData) 28 }catch{ 29 return 30 } 31 } 32 } 33 task.resume() 34 }
上記コードでAPI接続を行うと、コンソールに以下のエラーが表示されます。
Error: cannot create URL
そのため、以下の場所が原因となっています。
guard let url = URL(string: endpoint) else { print("Error: cannot create URL") return }
試したこと
回答していただいた方法を参考に以下の方法を試しましたが、解決できませんでした。
エラーの発生箇所は、同じくError: cannot create URL
こちらの場所となります。
searchWord = searchWord.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed)
英語では取得できるが、日本語では取得できないので、API
で提供されるデータがutf-16
の可能性もあると思い、以下のように編集して試しましたが、取得できませんでした。
let endpoint = "http://sample.com/api/books/?title=(searchWord.utf16)"
補足情報
Swift 5.0
SwiftUI 2.0
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/30 18:33