Як відкрити URL в Swift3


149

openURLв Swift3 було застаріло. Чи може хтось навести кілька прикладів того, як 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 "
Ібрагім БОЛАТ

ви повинні використовувати оператор + на своєму, Stringа не наURL
Devran Cosmo Uenal

Бічна примітка: не намагайтеся цього робити: UIApplication.shared.openURL (URL (рядок: "сюди вставте URL")!). Компілятор на XCode 8 заплутається і не зможе правильно скласти. Тому просто використовуйте це рішення як є. Чудово працює! Дякую.
Джоель

Як би я відкрив URL-адресу, не відкриваючи Safari? Як змусити URL відкритись на задньому плані? Будь ласка , дайте відповідь на моє запитання по адресу: stackoverflow.com/questions/43686252 / ... .
Крістіан Крейтер

1
Ви маєте на увазі, що Свіфт не змушує вас підніматися на стіни, щоб зробити щось таке складне, як відкриття 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)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.