【问题标题】:Swift - function to return different value based on another variableSwift - 基于另一个变量返回不同值的函数
【发布时间】:2021-05-11 21:09:26
【问题描述】:

我有一个视图 (view1) 来显示不同的数据,我希望该视图根据另一个变量进行更改。

struct View1: View {

let array = myFunc()

var body: some View {
        
    VStack {
    
       Text("\(settings.score)")
            List {
            ForEach(0..<array.count) { section in
        
            NavigationLink(destination: RowDetailView(array: array[section])) {

            RowView(array: array[section])
            }
            }
}
        }

在另一个视图中我建立了一个 Observable 对象:

class GameSettings: ObservableObject {
@Published var score = 1
}

在其他视图中,这一切都很好。我可以根据需要更新它。

我有一个函数来获取数组变量,我希望它根据“score”的当前值返回一个不同的数组。

func myFunc() -> [arrayModel] {
@StateObject var settings = GameSettings()

if settings.score == 1 {
var array = [ arrayModel(example: example) ]
return array
}
else if settings.score == 2 {
var array = [ arrayModel(example: example) ]
return array
}
}

这似乎不起作用。我已经尝试了各种调整版本,但找不到如何正确实现它。任何帮助将不胜感激。

【问题讨论】:

    标签: swiftui swiftui-view


    【解决方案1】:

    如果问题是settings.score 不是myFunc 中的当前,并且如果myFunc 在 SwiftUI 视图中,您可以执行以下操作:

    1. @StateObject var settings = GameSettings() 更改为@EnvironmentObject var settings: GameSettings,并将其移到外部 myFunc
    2. 在您的SceneDelegate 中,存储对GameSettings() 的引用,如下所示:static var gameSettings = GameSettings()
    3. 在您的SceneDelegatescene(_:willConnectTo:options:) 函数中,使用.environmentObject 修饰符将ObservedObject 提供给您的视图,并传入您在步骤#2 中存储的变量,如下所示:
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
            let contentView = ContentView()
    
            if let windowScene = scene as? UIWindowScene {
                let window = UIWindow(windowScene: windowScene)
                window.rootViewController = UIHostingController(rootView: contentView.environmentObject(SceneDelegate.gameSettings))
                self.window = window
                window.makeKeyAndVisible()
            }
        }
    

    【讨论】:

    • 您好,感谢您回答我的问题。我是 Swifui 的新手,所以我不知道 SceneDelegte 是什么,所以我发现很难实现它。正如我所说,访问或修改settings.score没有问题,我只想根据settings.score的不同值返回不同的数组值
    猜你喜欢
    • 1970-01-01
    • 2021-05-15
    • 2010-09-15
    • 2020-06-12
    • 2019-09-01
    • 2017-03-29
    • 1970-01-01
    • 2021-06-23
    • 2020-12-01
    相关资源
    最近更新 更多