swiftui - 在 SwiftUI 开始渲染 ContentView 之前,我们如何从 Views 中独立运行一些逻辑?
问题描述
我想知道如何在 SwiftUI 尝试呈现 ContentView 之前运行一些逻辑函数或控制流运算符?我可以在哪里以及如何放置我的代码?
更新: init(){} before var body: some Scene
当我使用 init 并在那里执行我的逻辑时,我找不到报告我的过程结果的方法,我该如何解决这个问题?
我的代码:
import SwiftUI
@main
struct _99App: App
{
init() {
let firstName = "omid"
print(firstName)
}
@State var name : String = firstName // ← Here Error: Cannot find 'firstName' in scope
var body: some Scene {
WindowGroup {
ContentView(name: $name)
}
}
}
PS:基本上我需要一个地方在应用程序发生任何事情之前运行我的逻辑。
解决方案
您可以使用某种ObservableObject
asStateObject
将在其他所有内容之前初始化。
所以解决方案可能如下所示
let globalState = MyAppState()
@main
struct _99App: App
{
@StateObject var appState = globalState
init() {
globalState.firstName = "updated"
print("updated")
}
var body: some Scene {
WindowGroup {
ContentView().environmentObject(appState)
// and use as
// @EnvironmentObject var appState: MyAppState
// inside ContentView
}
}
}
class MyAppState: ObservableObject {
@Published var firstName: String
init() {
self.firstName = "omid"
print(firstName)
}
}
推荐阅读
- mysql - 将数据保存在数据库中或将数据保存在文件中哪个更合适?
- javascript - 获取将正则表达式与数据属性匹配的行 ID
- php - WordPress 初始 HTTP 请求(视口)需要很长时间
- java - 我在用 java 构建我的 ui 时遇到问题
- insert - DB2 在存储过程中插入数据时出现问题
- c# - 什么是编译器警告 CS1723“XML 注释具有引用类型参数的 cref 属性‘T’”?
- java - Postgres SQL Select 语句的执行在 8 次尝试后减慢了 10 倍
- c# - 使用 NReco 将 HTML 转换为 PDF 时没有分页符
- c - 为什么可以使用字符串文字来初始化 unsigned char 数组,但不能初始化 unsigned char 指针?
- java - Facebook4j - 访问并发布到不同的组