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.