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.