swiftui - 使用非零值初始化可选的 @AppStorage 属性
问题描述
我需要一个可选的@AppStorage
字符串属性(用于NavigationLink
选择,需要可选),所以我声明
@AppStorage("navItemSelected") var navItemSelected: String?
我需要它以非零的默认值开始,所以我尝试了:
@AppStorage("navItemSelected") var navItemSelected: String? = "default"
但这不会编译。
我也试过:
init() {
if navItemSelected == nil { navItemSelected = "default" }
}
但这只会在应用程序启动时覆盖实际的持久值。
有没有办法用默认的非零值启动它,然后让它像往常一样持续存在?
解决方案
这是基于内联的可能方法的简单演示Binding
(跟进我上面的评论)。
使用 Xcode 13 / iOS 15 测试
struct DemoAppStoreNavigation: View {
static let defaultNav = "default"
@AppStorage("navItemSelected") var navItemSelected = Self.defaultNav
var body: some View {
NavigationView {
Button("Go Next") {
navItemSelected = "next"
}.background(
NavigationLink(isActive: Binding(
get: { navItemSelected != Self.defaultNav },
set: { _ in }
), destination: {
Button("Return") {
navItemSelected = Self.defaultNav
}
.onDisappear {
navItemSelected = Self.defaultNav // << for the case of `<Back`
}
}) { EmptyView() }
)
}
}
}
推荐阅读
- java - 如何构建正则表达式以查找特定单词
- c++ - 递归无序映射
- c - 如何在 NVRTC 编译程序中正确使用 include stdio.h?
- c++ - 为什么 karatsuba 实施给出了错误的结果
- java - 这两个sql语句(JDBC)有什么区别?
- java - 如何在 MANIFEST.MF 中指定 fat jar 的内容?
- python-3.x - 在 Discord.py 中输入消息
- node.js - 在使用 express 服务器为 React 应用程序提供服务时将环境变量注入
- java - 如何在andorid studio中记住Value?
- android - 在 JNI_OnLoad 中获取上下文?