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

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 做出各自需要的调整。
如果您发现本文对您有所帮助或者享受阅读,请考虑捐赠以支持我的写作。您的贡献将帮助我继续为您创造有价值的内容。
通过 微信、 Patreon、 Buy Me a Coffee 进行捐赠。
欢迎通过 Twitter、 Discord 频道 或下方的留言板与我进行交流。
通过 微信、 Patreon、 Buy Me a Coffee 进行捐赠。
欢迎通过 Twitter、 Discord 频道 或下方的留言板与我进行交流。
本博客文章采用 CC 4.0 协议,转载需注明出处和作者。