繁体   English   中英

如何修复类型“()”不能符合“视图”; 只有结构/枚举/类类型可以符合协议

[英]how do i fix Type '()' cannot conform to 'View'; only struct/enum/class types can conform to protocols

嗨,我正在制作游戏,但如果 state 无法正常工作

现在我添加了程序的完整代码(contentView.swift)

希望它对我更有用

该代码是在 xcode 中制作的,该程序适用于 macos

编码在 xcode 和 swiftui

请不要使用此代码,其版权归我所有


import SwiftUI

struct ContentView: View {
    
    @State private var sp = false
    @State private var loaded = false
    @State private var uname = ""
    @State private var text = "input a number"
    @State private var etext = ""
    @State private var sats = ""
    @State private var mbt = "select collor"
    @State private var gameState = 0
    @State private var data = 0
    @State private var temp = 0
    @State private var type = 0
    @State private var collor = 0
    @State private var intsats = 0
    //@State private var password = ""
    
    
    var body: some View {
        VStack {
            if sp == false {
                Text("Alien entertaiment presentate\n\n")
                Text("casino\n\n")
                Button(action: {
                    self.sp = true
                    //self.loadEndings()
                    //self.load()
                }) {
                    Text("Start")
                }
                Text("\n\n")
            }else if sp == true && loaded == false {
                TextField("user name", text: $uname)
                //SecureField("pasword", text: $password)
                Text(uname)
                //Text(password)
                Button(action: {
                    self.loaded = true
                    self.load()
                }) {
                    Text("sign in")
                }
                
            }else if sp == true && loaded == true {
                Text("\(data)")
                Text("\n")
                Text(etext)
                if etext != "" {Text("\n")}
                Text("\n")
                //Text(text)
                Text("\n")
                if gameState == 0 {
                    MenuButton(mbt) {
                        Button("red", action: {self.mbt = "red"; self.collor = 1})
                        Button("black", action: {self.mbt = "red"; self.collor = 2})
                    }
                    TextField("a number", text: $sats)
                    Button(action: {
                        self.intsats = Int(self.sats) ?? 0
                        if self.intsats == 0 || self.intsats > self.data {
                            self.etext = "not valid number or you do not have enuf mony"
                        }else{
                            self.gameState = 1
                        }
                    }) {
                        Text("bet")
                    }
                }else if gameState == 1
                {
                    if self.rand() == self.collor
                    { //Type '()' cannot conform to 'View'; only struct/enum/class types can conform to protocols
                        self.text = "you won"
                        self.data = 1
                    }
                }
            }
        }
    }
    
    let defaults = UserDefaults.standard
    
    func save()
    {
        defaults.set(self.data, forKey: uname)
    }
    func load()
    {
        self.data = defaults.integer(forKey: uname)
        self.temp = data
        if temp == 0 {
            self.data = 86
        }
    }
    func rand() -> Int
    {
        var type = 0
        type = Int.random(in: 1..<3)
        return type
    }
}


struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

操作只是归档

该游戏适用于 mac os catalina 并且可以用于可能所有可以在其上安装应用程序的 appels 东西

这是因为在 View 的body中,您需要返回一个视图。 您不能像普通的 function 那样只执行计算等。

您可以删除此代码(它不返回视图,因此编译失败):

else if gameState == 1 {
    if self.rand() == self.collor {
        self.text = "you won"
        self.data = 1
    }
}

并将其放在您按钮的操作中:

if gameState == 0 {
    ...
    TextField("a number", text: $sats)
    Button(action: {
        self.intsats = Int(self.sats) ?? 0
        if self.intsats == 0 || self.intsats > self.data {
            self.etext = "not valid number or you do not have enuf mony"
        } else {
            self.gameState = 1
            if self.rand() == self.collor { // <- move it here
                self.text = "you won"
                self.data = 1
            }
        }
    }) {
        Text("bet")
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM