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./… " 이 문자열은 "No '+'후보가 예상되는 상황에 맞는 결과 유형 'URL'을 생성합니다"
Ibrahim BOLAT

당신은 당신의 + 연산자를 사용해야하는 String대신에URL
Devran 코스모 Uenal

참고 : UIApplication.shared.openURL (URL (string : "insert url here")!)을 시도하지 마십시오. XCode 8의 컴파일러는 혼동되어 제대로 빌드 할 수 없습니다. 따라서이 솔루션을 그대로 사용하십시오. 잘 작동합니다! 감사.
Joel

실제로 Safari를 열지 않고 어떻게 URL을 열 수 있습니까? 백그라운드에서 URL을 "열기"하려면 어떻게해야합니까? :에 내 질문에 답변 해주세요 stackoverflow.com/questions/43686252/...을 .
Christian Kreiter

1
Swift가 URL을 여는 것만 큼 복잡한 일을하기 위해 벽을 오르지 않습니까? [jaw drop]
Daniel Springer

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.
Sulthan

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)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.