为什么我不能使用这个对象以及为什么我不能在 Swift 中给它赋值?

问题描述 投票:0回答:1

好吧,我正在尝试创建一个家庭类,首先我发现如果我将其放在标题后面和“ContentView”上方,它就找不到“get”和“set”。所以我把它移到了“body”,我认为你应该在视图之外创建这些类,然后在视图中调用它们以使你的代码更干净?我也不知道这个。我的主要问题是为什么我不能组建一个奥布莱恩家庭?它说“在声明之前使用局部变量'family'”,当我将它作为一个类时,我不是声明了family吗?当我尝试将 Obriens 'newVal' 分配给 0 时,我遇到的另一个错误是“实例方法声明中预期有 'func' 关键字”。有人可以向我解释一下他们的逻辑吗,因为我真的是在自己跑路,这是现在我在大学里是如何学习这些东西的。合作是最好的,至少对我来说是这样。抱歉加载了帖子,但我很困惑。

import Foundation
import SwiftUI





struct ContentView: View {
    
    @Binding var document: lolDocument

    var body: some View {
        class family {
            var members: Int{
                var numofMems = 0
                var newVal: Int
                
                get {
                    return numofMems
                }
                
                set (newVal){
                    
                    if newVal >= 2{
                        numofMems = newVal
                    }
                    else{
                        print("Can't have less than 2 members")
                    }
                }
                
            }
            
            var Obriens = family()
            
            Obriens(newVal: 0)

            
        }
        TextEditor(text: $document.text)
        
    }
}

#Preview {
    ContentView(document: .constant(lolDocument()))
}

我已经尝试了我所知道的方法,但无法轻易消除错误。

swift class object properties
1个回答
0
投票

我认为你正在努力实现这样的目标?

类可以帮助分离更新成员时的逻辑。

class FamilyMembersManager {
    
    private var members: Int = 0
    
    init(members: Int) {
        self.members = members
    }
    
    func getFamilyMembers() -> Int {
        return members
    }
    
    func setFamilyMembers(_ newMembers: Int) {
        if newMembers >= 2 {
            self.members = newMembers
        } else {
            print("Can't have less than 2 members")
            // handle case correctly
        }
    }
}

struct ContentView: View {
    
    @Binding var document: lolDocument

    private var Obriens = FamilyMembersManager(members: [])
    
    var body: some View {
        TextEditor(text: $document.text)   
    }
}

#Preview {
    ContentView(document: .constant(lolDocument()))
}
© www.soinside.com 2019 - 2024. All rights reserved.