首页 > 解决方案 > 如何在 SwiftUI 视图中执行非视图代码

问题描述

我一遍又一遍地为此苦苦挣扎,所以我想我错过了一些东西。我需要进行数学运算、进行设置、分配值或任何一系列简单操作以响应某些用户操作,例如此处显示的示例,而 SwiftUI 想要一个我不需要视图的视图。必须有办法绕过 ViewBuilder 的规则。我通过创建一个不必要的视图并在视图的 init() 中执行我需要的代码来解决这个问题,但这似乎非常尴尬。

import SwiftUI

struct ContentView: View
{
    @State var showStuff = false

    var body: some View
    {
        VStack
        {
            Toggle(isOn: $showStuff)
            {
                Text("Label")
            }
            if showStuff
            {
                UserDefaults.standard.set(true, forKey: "Something")
            }
        }
    }
}

标签: swiftuiviewbuilder

解决方案


struct ExecuteCode : View {
    init( _ codeToExec: () -> () ) {
        codeToExec()
    }
    
    var body: some View {
        return EmptyView()
    }
}

用法:

HStack {
    ExecuteCode { print("SomeView1 was re-drawn!") }
    SomeView1()
}

推荐阅读