HowTo —— 使用 onOpenURL 处理 Universal Links

SwiftUI2.0 由于可以采用新的代码架构(Life Cycle SwiftUI App)来组织 app, 因此提供了 onOpenURL 来处理 Univeresal Links。不同于在 AppDelegate 或 SceneDelegate 中的解决方案,onOpenURL 作为一个 view modifier,你可以在任意 View 上注册你的 app 的 URL 处理机制。关于如何为自己的 app 创建 URL Scheme,请参阅 苹果的官方文档

健康笔记 - 新生活从记录开始

健康笔记是一款智能的数据管理和分析工具,让您完全掌控自己和全家人的健康信息。作为慢性病患者,肘子深知健康管理的重要与难度。创建健康笔记的初心,就是要为您提供一款轻松高效的健康信息记录与分析工具

推荐

基本用法

VStack{
   Text("Hello World")
}
.onOpenURL{ url in
    //做点啥
}

示例代码

首先在项目中设置 URL

URL
import SwiftUI

struct ContentView: View {
    @State var tabSelection:TabSelection = .news
    @State var show = false
    var body: some View {
        TabView(selection:$tabSelection){
            Text("News")
                .tabItem {Image(systemName: "newspaper")}
                .tag(TabSelection.news)
            Text("Music")
                .tabItem {Image(systemName: "music.quarternote.3")}
                .tag(TabSelection.music)
            Text("Settings")
                .tabItem {Image(systemName: "dial.max")}
                .tag(TabSelection.settings)
        }
        .sheet(isPresented: $show) {
            Text("URL 调用参数错误")
        }
        .onOpenURL { url in
            let selection = url.host
            switch selection{
            case "news":
                tabSelection = .news
            case "music":
                tabSelection = .music
            case "settings":
                tabSelection = .settings
            default:
                show = true
            }
        }
    }
}

enum TabSelection:Hashable{
    case news,music,settings
}

macOS 目前暂不支持,应该会在正式版本提供。

特别注意

  • onOpenURL 只有在项目采用 Swift App 的方式管理 Life Cycle 才会响应
  • 在代码中可以添加多个 onOpenURL,注册在不同的 View 上,当采用 URL 访问时,每个闭包都会响应。这样可以针对不同的 View 做出各自需要的调整。
如果您发现本文对您有所帮助或者享受阅读,请考虑捐赠以支持我的写作。您的贡献将帮助我继续为您创造有价值的内容。

通过 进行捐赠。

欢迎通过 TwitterDiscord 频道 或下方的留言板与我进行交流。

本博客文章采用 CC 4.0 协议,转载需注明出处和作者。