2016-09-09 4 views
0

私はボタンがタップされたときに、この関数を実行しようとしています:スウィフト3リンクを開く

@IBAction func openLink(_ sender: UIButton) { 
    let link1 = "https://www.google.com/#q=" 
    let link2 = birdName.text! 
    let link3 = link2.replacingOccurrences(of: " ", with: "+") //EDIT 
    let link4 = link1+link3 
    guard 
     let query = link4.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed), 
     let url = NSURL(string: "https://google.com/#q=\(query)") 
     else { return } 
    UIApplication.shared.openURL(URL(url)) 
} 

しかし、最後の行は、「非機能型の値を呼び出すことはできません 『のUIApplication』のフラグが立てられ、この。構文はここからですので、私は起こっていただきましたわからないんだけど

+0

これは、ボタンが押されたときにアプリがクラッシュする原因となります。「任意の値をアンラッピングしている間に予期せぬ発見なし」 – Alex

+0

正しいURLリンクを使用していることを確認してください。クエリ文字列を%エスケープする必要があるかもしれません。 –

+0

ブラウザでリンクを試しましたが、リンクは良好です。 %エスケープとは何ですか? – Alex

答えて

7

使用ガードは、出現を置き換え、テキストフィールドのtextプロパティをアンラップ結果をパーセントエンコーディングを追加し、結果の文字列からURLを作成するには:。

このようにしてみてください:

guard 
    let text = birdName.text?.replacingOccurrences(of: " ", with: "+"), 
    let query = text.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed), 
    let url = URL(string: "https://google.com/#q=" + query) 
else { return } 
if #available(iOS 10.0, *) { 
    UIApplication.shared.open(url) 
} else { 
    UIApplication.shared.openURL(url) 
} 
+1

教育を受けていないバグや質問で私たちのような人々を助けるような人々に本当に感謝しています。あなたは文字通り私たちが生計を立てるのを手伝っている! – Honey

+0

@ハニーおかげさまで嬉しいです。どういたしまして。 –