Swift3 में URL कैसे खोलें


149

openURLSwift3 में पदावनत किया गया है। क्या कोई उदाहरण दे सकता है कि 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" का निर्माण करते हैं
इब्राहिम BOLAT

आपको + ऑपरेटर को अपने Stringबदले पर उपयोग करना होगाURL
Devran Cosmo Uenal

साइड नोट: ऐसा करने की कोशिश न करें: UIApplication.sared.openURL (URL (string: "Insert url here)!)।" XCode 8 पर संकलक भ्रमित हो जाएगा और ठीक से निर्माण करने में सक्षम नहीं होगा। तो बस के रूप में इस समाधान का उपयोग करें। बहुत अच्छा काम करता है! धन्यवाद।
जोएल

मैं वास्तव में सफारी खोलने के बिना यूआरएल कैसे खोलूंगा? मुझे पृष्ठभूमि में "ओपन" करने के लिए यूआरएल कैसे मिलेगा? कृपया मेरे सवाल का जवाब दें: 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

स्विफ्ट 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 स्विफ्ट 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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.