So öffnen Sie eine URL in Swift3


149

openURLwurde in Swift3 veraltet. Kann jemand einige Beispiele dafür geben, wie der Ersatz openURL:options:completionHandler:funktioniert, wenn versucht wird, eine URL zu öffnen?

Antworten:


385

Alles was Sie brauchen ist:

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)
}

Was ist, wenn ich den Operator '+' in meiner URL verwende? Zum Beispiel: " xxxxx.com./… " wie folgt . Diese Zeichenfolge gab mir einen Fehler "Keine '+' Kandidaten produzieren den erwarteten kontextuellen Ergebnistyp 'URL"
Ibrahim BOLAT

Sie müssen den Operator + auf Ihrem Stringstattdessen auf demURL
Devran Cosmo Uenal

Randnotiz: Versuchen Sie nicht, dies zu tun: UIApplication.shared.openURL (URL (Zeichenfolge: "URL hier einfügen")!). Der Compiler unter XCode 8 wird verwirrt und kann nicht richtig erstellen. Verwenden Sie diese Lösung also so wie sie ist. Funktioniert super! Vielen Dank.
Joel

Wie würde ich die URL öffnen, ohne Safari tatsächlich zu öffnen? Wie kann ich die URL im Hintergrund "öffnen"? Bitte beantworten Sie meine Frage unter: stackoverflow.com/questions/43686252/… .
Christian Kreiter

1
Du meinst, Swift bringt dich nicht dazu, Wände zu besteigen, um etwas so Komplexes wie das Öffnen einer URL zu tun? [Kiefer fallen gelassen]
Daniel Springer

36

Die obige Antwort ist richtig, aber wenn Sie Sie überprüfen möchten canOpenUrloder nicht, versuchen Sie es so.

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)")
    })
}

Hinweis: Wenn Sie die Fertigstellung nicht bearbeiten möchten, können Sie auch so schreiben.

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

Sie müssen nicht schreiben, completionHandlerda es den Standardwert enthält. Weitere nilInformationen finden Sie in der Apple-Dokumentation .


28

Wenn Sie in der App selbst öffnen möchten, anstatt die App zu verlassen, können Sie SafariServices importieren und ausarbeiten.

import UIKit
import SafariServices

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

1
Diese Methode ist die beste Vorgehensweise gemäß den iOS-Richtlinien
gtrujillos

8

Swift 3 Version

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)
    }
}

Sie können einen regulären Ausdruck mit verwenden replacingOccurrences.
Sulthan

2

Ich verwende macOS Sierra (v10.12.1) Xcode v8.1 Swift 3.0.1 und in ViewController.swift hat Folgendes für mich funktioniert:

//
//  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)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.