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.