2017-05-12 1 views
0

検索バーで単純なテーブルビューを設定しようとしていますが、searchBarSearchButtonClickedのurlRequestをロードできないようにurl定数が返されません。searchBarSearchButtonClicked url return nil

ありがとうございます。

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { 
    var text = searchBar.text 
    text = text?.replacingOccurrences(of: " ", with: "+") 
    let url = URL(string: "https://www.google.com/#q=\(text)") 
    let req = URLRequest(url: url! as URL) 
    wv.loadRequest(req as URLRequest) 
} 
+0

を:ランタイムでのクラッシュの回避をするには

let searchQuery = "What's the meaning of life and everything" var urlComponents = URLComponents(string: "https://www.google.com") urlComponents?.queryItems = [ URLQueryItem(name: "q", value: searchQuery) ] let url = urlComponents?.url! 

は、それがoptionals !アンラップ力を使用し、if letまたはguard letがそれらをアンラップするために使用しない方が良いのか? – KKRocks

+0

let url = URL(文字列: "https://www.google.com/#q=test")がnilを返していないので、あなたのテキストに何かを入れる必要があります – Retterdesdialogs

+0

あなたのコードを使用してURLを取得しました – KKRocks

答えて

0

あなたの問題はtextString?ではなく、プレーンStringあるので"q=\(text)""q=Optional(your text here)"になることです。あなたはそれをアンラップか、それを避けるために?? ""でデフォルト値を使用することができます。

あなたが持っているさらに
let url = URL(string: "https://www.google.com/#q=\(text ?? "")") 

URLにURLにそれらを使用するためには、あなたのパラメータをエンコード:

let searchQuery = "What's the meaning of life and everything" 
let encodedQuery = searchQuery.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)! 
let url = URL(string: "https://www.google.com/#q=\(encodedQuery)")! 

URLComponentsクラスを使用して、安全なURLを構成することもできます。あなたが入力したtext

if let url = urlComponents?.url { 
    let req = URLRequest(url: url) 
    wv.loadRequest(req) 
} 
関連する問題