jak otworzyć adres URL w Swift3


149

openURLzostał wycofany w Swift3. Czy ktoś może podać przykłady działania zamiany openURL:options:completionHandler:podczas próby otwarcia adresu URL?

Odpowiedzi:


385

Wszystko czego potrzebujesz to:

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

co jeśli użyję operatora „+” w moim adresie URL? Na przykład: „ xxxxx.com./… ” w ten sposób. Ten ciąg dał mi błąd „Brak kandydatów„ + ”generuje oczekiwany kontekstowy typ wyniku„ URL ”
Ibrahim BOLAT

musisz Stringzamiast tego użyć operatora + na swoimURL
Devran Cosmo Uenal

Uwaga boczna: nie próbuj tego robić: UIApplication.shared.openURL (URL (string: "tu wstaw adres url")!). Kompilator na XCode 8 będzie zdezorientowany i nie będzie w stanie poprawnie zbudować. Więc po prostu użyj tego rozwiązania tak, jak jest. Działa świetnie! Dzięki.
Joel

Jak otworzyć adres URL bez otwierania przeglądarki Safari? Jak sprawić, aby adres URL „otwierał się” w tle? Proszę odpowiedzieć na moje pytanie pod adresem: stackoverflow.com/questions/43686252/… .
Christian Kreiter

1
Masz na myśli, że Swift nie zmusza cię do wspinania się po ścianach, aby zrobić coś tak złożonego, jak otwarcie adresu URL? [szczęka opadła]
Daniel Springer,

36

Powyższa odpowiedź jest poprawna, ale jeśli chcesz się sprawdzić canOpenUrllub nie, spróbuj w ten sposób.

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

Uwaga: jeśli nie chcesz zajmować się uzupełnianiem, możesz również napisać w ten sposób.

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

Nie musisz pisać, completionHandlerponieważ zawiera wartość domyślną nil, sprawdź dokumentację Apple, aby uzyskać więcej szczegółów.


28

Jeśli chcesz otworzyć samą aplikację zamiast opuszczać aplikację, możesz zaimportować SafariServices i rozwiązać problem.

import UIKit
import SafariServices

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

1
Ta metoda jest najlepszą praktyką zgodnie z wytycznymi iOS
gtrujillos

8

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

możesz użyć wyrażenia regularnego z replacingOccurrences.
Sulthan

2

Używam macOS Sierra (v10.12.1) Xcode v8.1 Swift 3.0.1 i oto, co zadziałało w 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)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.