value of optional type 'String?'の対処法に関して
value of optional type 'String?' not unwrapped; did you mean to use '!' or '?'?
というSwiftのOptional型に関してのエラーが生じました。
Optional Value(「?」「!」が付随したコードで、「nil」を許容したコードか「nil」wo
許容しないコードのいずれかを明示する)にする必要があるのはわかったのですが、具体的に
let text = searchBar.text.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())
のコードのどこに対して行えば良いのかがわからないため質問致します。
以下コードなります。
import UIKit
class ListViewController: UITableViewController {
@IBOutlet weak var searchBar: UISearchBar!
private var results: [NSDictionary]?
override func viewDidLoad() {
super.viewDidLoad()
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem()
}
//中略
extension ListViewController: UISearchBarDelegate {
// searchBarのSearchボタンをタップしたときの処理
func searchBarSearchButtonClicked(searchBar: UISearchBar) {
searchBar.resignFirstResponder() // キーボードを閉じる
// エラーはここから
let text = searchBar.text.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())
//ここまでです。
if let text = text {
AFHTTPSessionManager().GET(
"https://itunes.apple.com/search?term=\(text)&country=JP&lang=ja_jp&media=music",
parameters: nil,
success: { (task: NSURLSessionDataTask!, response: AnyObject!) -> Void in
if let data = response as? NSDictionary, results = data["results"] as? [NSDictionary] {
self.results = results
self.tableView.reloadData() // 再描画
}
},
failure: nil)
}
}