If you have a SwiftUI application and you present text with a URL, have you notices how the URL is being opened by Safari and not an in-app browser, and want to change that?
  
  
  What is OpenURLAction?
An action that opens a URL.
OpenURLAction can be used to create your own handler for opening url's in SwiftUI, this makes it possible to use your own (in-app) WebView or transform the url before you open it in a external browser.
OpenURLAction requires a return statement with an appropiate value, in the (psuedo) codeblock below you can see which results are possible and what their meaning is.
struct OpenURLAction.Result {
    /// The handler did handle the URL.
    let handled
    /// The handler discarded the URL.
    let discarded
    /// The handler asks the system to open the original URL.
    let systemAction
    /// The handler asks the system to open the modified URL.
    let systemAction(let URL)
}
Use Case: Simple url handler
requires you to have a function called handleURL()
/// Basic example
Text("Visit [my Blog](https://www.wesleydegroot.nl) for more details.")
    .environment(\.openURL, OpenURLAction { url in
        handleURL(url) // Define this method to take appropriate action.
        return .handled
    })
Use Case: Simple url handler
requires you to have a function called handleURL()
struct SafariURL: Identifiable {
    let id = UUID()
    let url: URL
}
struct ContentView: View {
    @State
    var safariURL: SafariURL?
    var body: some View {
        Text("Visit [my Blog](https://www.wesleydegroot.nl) for more details.")
            .environment(\.openURL, OpenURLAction { url in
                safariURL = SafariURL(url: url)
                return .handled
            })
            .sheet(item: $safariURL, content: { safariURL in
                SafariView(url: safariURL.url)
            })
    }
    func handleURL(url: URL) {
    /// open SFSafariViewController
    }
}
Conclusion
OpenURLAction is a great way to handle URL's in SwiftUI, it allows you to create your own handler for URL's and decide what to do with them.
Resources:
https://developer.apple.com/documentation/swiftui/openurlaction
 

 
    
Top comments (0)