【问题标题】:how do i fix Type '()' cannot conform to 'View'; only struct/enum/class types can conform to protocols如何修复类型“()”不能符合“视图”;只有结构/枚举/类类型可以符合协议
【发布时间】:2021-10-22 22:13:41
【问题描述】:

嗨,我正在制作游戏,但我无法让 if 状态工作

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

希望对我有帮助

代码是用xcode编写的,程序是为macos编写的

用 swiftui 编写的 xcode 代码

请不要使用我拥有版权的代码


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 的东西

【问题讨论】:

  • 尝试将类型名称改为viewType,然后检查...
  • 代码在哪里?我认为您的示例过于简约,无法理解发生了什么
  • jawadAli 我测试了它,但它没有工作,现在你有完整的代码新开发者

标签: swift swiftui macos-catalina


【解决方案1】:

这是因为在View的body中需要返回一个view。您不能像在 normal 函数中那样只执行计算等。

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

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")
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    相关资源
    最近更新 更多