Swift3でURLを開く方法


149

openURLSwift3では非推奨になりました。誰かがopenURL:options:completionHandler:URLを開こうとするときに置換がどのように機能するかのいくつかの例を提供できますか?

回答:


385

あなたに必要なのは:

guard let url = URL(string: "http://www.google.com") else {
  return //be safe
}

if #available(iOS 10.0, *) {
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
    UIApplication.shared.openURL(url)
}

URLで「+」演算子を使用するとどうなりますか?たとえば、「xxxxx.com./…」のようになります。その文字列により、「「+」候補は期待されるコンテキスト結果タイプ「URL」を生成しません」というエラーが発生しました
Ibrahim BOLAT

String代わりに+演算子を使用する必要がありますURL
Devran Cosmo Uenal 2017年

補足:これを実行しないでください:UIApplication.shared.openURL(URL(string: "ここにURLを挿入")!)。XCode 8のコンパイラーは混乱し、適切にビルドできなくなります。したがって、このソリューションをそのまま使用してください。よく働く!ありがとう。
Joel

実際にSafariを開かずにURLを開くにはどうすればよいですか?バックグラウンドでURLを「開く」にはどうすればよいですか?stackoverflow.com/questions/43686252/…で私の質問に答えてください。
クリスチャンクレイター2017

1
Swiftは、URLを開くのと同じくらい複雑なことをするために壁を登らせないのですか?[
ダニエル・スプリンガー、

36

上記の答えは正しいですが、あなたがあなたをチェックしたいかどうcanOpenUrlかは、このようにしてみてください。

let url = URL(string: "http://www.facebook.com")!
if UIApplication.shared.canOpenURL(url) {
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
    //If you want handle the completion block than 
    UIApplication.shared.open(url, options: [:], completionHandler: { (success) in
         print("Open url : \(success)")
    })
}

注:完了を処理したくない場合は、次のように書くこともできます。

UIApplication.shared.open(url, options: [:])

completionHandlerデフォルト値が含まれているため、記述する必要はありません。詳細についてはnilアップルのドキュメントを確認してください。


28

アプリを終了するのではなく、アプリ自体の内部を開きたい場合は、SafariServicesインポートして実行できます。

import UIKit
import SafariServices

let url = URL(string: "https://www.google.com")
let vc = SFSafariViewController(url: url!)
present(vc, animated: true, completion: nil)

1
この方法は、iOSガイドラインに基づくベストプラクティスです
gtrujillos

8

Swift 3バージョン

import UIKit

protocol PhoneCalling {
    func call(phoneNumber: String)
}

extension PhoneCalling {
    func call(phoneNumber: String) {
        let cleanNumber = phoneNumber.replacingOccurrences(of: " ", with: "").replacingOccurrences(of: "-", with: "")
        guard let number = URL(string: "telprompt://" + cleanNumber) else { return }

        UIApplication.shared.open(number, options: [:], completionHandler: nil)
    }
}

で正規表現を使用できますreplacingOccurrences
スルタン

2

私はmacOS Sierra(v10.12.1)Xcode v8.1 Swift 3.0.1を使用していますが、ViewController.swiftでうまくいきました:

//
//  ViewController.swift
//  UIWebViewExample
//
//  Created by Scott Maretick on 1/2/17.
//  Copyright © 2017 Scott Maretick. All rights reserved.
//

import UIKit
import WebKit

class ViewController: UIViewController {

    //added this code
    @IBOutlet weak var webView: UIWebView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Your webView code goes here
        let url = URL(string: "https://www.google.com")
        if UIApplication.shared.canOpenURL(url!) {
            UIApplication.shared.open(url!, options: [:], completionHandler: nil)
            //If you want handle the completion block than
            UIApplication.shared.open(url!, options: [:], completionHandler: { (success) in
                print("Open url : \(success)")
            })
        }
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


};

2
import UIKit 
import SafariServices 

let url = URL(string: "https://sprotechs.com")
let vc = SFSafariViewController(url: url!) 
present(vc, animated: true, completion: nil)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.