comment ouvrir une URL dans Swift3


149

openURLest obsolète dans Swift3. Quelqu'un peut-il donner des exemples du fonctionnement du remplacement openURL:options:completionHandler:lors de la tentative d'ouverture d'une URL?

Réponses:


385

Tout ce dont tu as besoin c'est:

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

et si j'utilise l'opérateur «+» dans mon URL? Par exemple: " xxxxx.com./... " comme ceci. Cette chaîne m'a donné une erreur "Aucun candidat '+' ne produit le type de résultat contextuel attendu 'URL"
Ibrahim BOLAT

vous devez utiliser l'opérateur + sur votre à la Stringplace sur leURL
Devran Cosmo Uenal

Note latérale: n'essayez pas de faire ceci: UIApplication.shared.openURL (URL (string: "insert url here")!). Le compilateur sur XCode 8 sera confus et ne pourra pas construire correctement. Alors utilisez simplement cette solution telle quelle. Fonctionne très bien! Merci.
Joel

Comment ouvrir l'URL sans ouvrir Safari? Comment faire "ouvrir" l'URL en arrière-plan? Veuillez répondre à ma question sur: stackoverflow.com/questions/43686252/… .
Christian Kreiter

1
Vous voulez dire que Swift ne vous oblige pas à escalader les murs pour faire quelque chose d'aussi complexe que d'ouvrir une URL? [mâchoire tombée]
Daniel Springer

36

La réponse ci-dessus est correcte, mais si vous voulez vous vérifier canOpenUrlou non, essayez comme ça.

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

Remarque: si vous ne souhaitez pas gérer la complétion, vous pouvez également écrire comme ceci.

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

Pas besoin d'écrire completionHandlercar il contient la valeur par défaut nil, consultez la documentation Apple pour plus de détails.


28

Si vous souhaitez ouvrir à l'intérieur de l'application elle-même au lieu de quitter l'application, vous pouvez importer SafariServices et le résoudre .

import UIKit
import SafariServices

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

1
Cette méthode est la meilleure pratique selon les directives iOS
gtrujillos

8

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

vous pouvez utiliser une expression régulière avec replacingOccurrences.
Sulthan

2

J'utilise macOS Sierra (v10.12.1) Xcode v8.1 Swift 3.0.1 et voici ce qui a fonctionné pour moi dans 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)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.