不断收到错误 'value of type ' '没有成员' '
keep getting error 'value of type ' ' has no member ' '
我已经在这个项目上卡了 2 天了,我觉得我真的需要帮助。
程序只完成了一半,因为我什至无法使布局正常工作。我有一个 var settings = setting() to link to the class setting()。在 class 设置中,我有不同的 vars 和 func。
最初,我将 class 放在项目中的另一个 swift 文件中,但是因为 Swift 一直给我 'type has no member' 错误,我决定将 class 放在 ContentView.swift 中。但即便如此,Swift 似乎在 class 实例中有选择地不识别我的变量,我无法准确指出原因。
例如第一行错误“'setting'类型的值没有成员'$playerChoice''说它找不到settings.playerChoice,同时没有在下面的行中列出相同的错误来寻找settings.playerChoice在字符串插值中。我尝试关闭和打开程序,shift cmd K 重新编译预览几次,它没有用。
谁能帮我看看究竟出了什么问题?谢谢。
我的代码如下:
import SwiftUI
import Foundation
class setting {
var playerChoice : Int = 0
var questionCount : Int = 0
var pcRandom : Int = 0
var correctAnswer = 0
var question : String = ""
var buttonArray = [Int]()
var enteredAnswer = ""
var gameRound : Int = 0
var scoreCount : Int = 0
var title2 = ""
var alertTitle = ""
var alertMessage = ""
var alertEndGame = false
func refreshGame() {
pcRandom = Int.random(in: 1 ... 12)
correctAnswer = playerChoice * pcRandom
question = "\(playerChoice) times \(pcRandom) is??"
}
func compareAnswer() {
let answerModified = enteredAnswer
let answerModified2 = answerModified.trimmingCharacters(in: .whitespacesAndNewlines)
if Int(answerModified2) == correctAnswer {
scoreCount += 1
title2 = "RIGHT"
}
else {
title2 = "WRONG"
}
if gameRound > questionCount {
alertTitle = "Game Ended"
alertMessage = "You got \(scoreCount) over \(questionCount)"
alertEndGame = true
}
else {
refreshGame()
}
gameRound += 1
gameRound += 1
}
}
var settings = setting()
struct ContentView: View {
var body: some View {
VStack {
Section (header: Text("Getting Your Settings Righttt").font(.title)) {
Form {
Stepper(value: settings.$playerChoice, in: 1...13, step: 1) { //value of type 'setting' ha no member '$playerChoice'
if settings.playerChoice == 13 {Text("All")}
else {
Text("Multiplication table \(settings.playerChoice)")
}
}
}
Form {
Text("Number of Questions?")
Picker(selection: settings.$questionCount, label: Text("Number of Questions?")) { //value of type 'setting' has no member '$questionCount'
ForEach (settings.questionCountArray, id: \.self) {Text("\([=12=])")} } ////value of type 'setting' ha no member '$questionCountArray'
.pickerStyle(SegmentedPickerStyle())
}
Spacer()
Button("Tap to start") {
settings.refreshGame
}
}
Section (header: Text("Game Play").font(.title)){
Text(settings.question)
TextField("Enter your answer", text: settings.$enteredAnswer, onCommit: settings.compareAnswer) //value of type 'setting' ha no member '$enteredAnswer'
Text("Your score is currently \(settings.scoreCount)")
Text("This is game round \(settings.gameRound) out of \(settings.questionCount)")
}
Spacer()
}
.alert(isPresented: settings.$alertEndGame) {
Alert(title: Text("Game Ended"), message: Text("You reached score \(settings.scoreCount) out of \(settings.questionCount)"), dismissButton: .default(Text("Play Again"))) //game doesnt restart and refresh
}
}
}
好吧,我没有检查逻辑,但是下面的固定代码至少可以编译,希望对您有所帮助
import SwiftUI
import Combine
class Setting: ObservableObject {
@Published var playerChoice : Int = 0
var questionCount : Int = 0
@Published var questionCountArray = [String]()
var pcRandom : Int = 0
var correctAnswer = 0
var question : String = ""
var buttonArray = [Int]()
@Published var enteredAnswer = ""
var gameRound : Int = 0
var scoreCount : Int = 0
var title2 = ""
var alertTitle = ""
var alertMessage = ""
@Published var alertEndGame = false
func refreshGame() {
pcRandom = Int.random(in: 1 ... 12)
correctAnswer = playerChoice * pcRandom
question = "\(playerChoice) times \(pcRandom) is??"
}
func compareAnswer() {
let answerModified = enteredAnswer
let answerModified2 = answerModified.trimmingCharacters(in: .whitespacesAndNewlines)
if Int(answerModified2) == correctAnswer {
scoreCount += 1
title2 = "RIGHT"
}
else {
title2 = "WRONG"
}
if gameRound > questionCount {
alertTitle = "Game Ended"
alertMessage = "You got \(scoreCount) over \(questionCount)"
alertEndGame = true
}
else {
refreshGame()
}
gameRound += 1
gameRound += 1
}
}
struct ASFContentView: View {
@ObservedObject var settings = Setting()
var body: some View {
VStack {
Section (header: Text("Getting Your Settings Righttt").font(.title)) {
Form {
Stepper(value: $settings.playerChoice, in: 1...13, step: 1) { //value of type 'setting' ha no member '$playerChoice'
if settings.playerChoice == 13 {Text("All")}
else {
Text("Multiplication table \(settings.playerChoice)")
}
}
}
Form {
Text("Number of Questions?")
Picker(selection: $settings.questionCount, label: Text("Number of Questions?")) { //value of type 'setting' has no member '$questionCount'
ForEach (settings.questionCountArray, id: \.self) {Text("\([=10=])")} } ////value of type 'setting' ha no member '$questionCountArray'
.pickerStyle(SegmentedPickerStyle())
}
Spacer()
Button("Tap to start") {
self.settings.refreshGame()
}
}
Section (header: Text("Game Play").font(.title)){
Text(settings.question)
TextField("Enter your answer", text: $settings.enteredAnswer, onCommit: settings.compareAnswer) //value of type 'setting' ha no member '$enteredAnswer'
Text("Your score is currently \(settings.scoreCount)")
Text("This is game round \(settings.gameRound) out of \(settings.questionCount)")
}
Spacer()
}
.alert(isPresented: $settings.alertEndGame) {
Alert(title: Text("Game Ended"), message: Text("You reached score \(settings.scoreCount) out of \(settings.questionCount)"), dismissButton: .default(Text("Play Again"))) //game doesnt restart and refresh
}
}
}
我已经在这个项目上卡了 2 天了,我觉得我真的需要帮助。
程序只完成了一半,因为我什至无法使布局正常工作。我有一个 var settings = setting() to link to the class setting()。在 class 设置中,我有不同的 vars 和 func。
最初,我将 class 放在项目中的另一个 swift 文件中,但是因为 Swift 一直给我 'type has no member' 错误,我决定将 class 放在 ContentView.swift 中。但即便如此,Swift 似乎在 class 实例中有选择地不识别我的变量,我无法准确指出原因。
例如第一行错误“'setting'类型的值没有成员'$playerChoice''说它找不到settings.playerChoice,同时没有在下面的行中列出相同的错误来寻找settings.playerChoice在字符串插值中。我尝试关闭和打开程序,shift cmd K 重新编译预览几次,它没有用。
谁能帮我看看究竟出了什么问题?谢谢。
我的代码如下:
import SwiftUI
import Foundation
class setting {
var playerChoice : Int = 0
var questionCount : Int = 0
var pcRandom : Int = 0
var correctAnswer = 0
var question : String = ""
var buttonArray = [Int]()
var enteredAnswer = ""
var gameRound : Int = 0
var scoreCount : Int = 0
var title2 = ""
var alertTitle = ""
var alertMessage = ""
var alertEndGame = false
func refreshGame() {
pcRandom = Int.random(in: 1 ... 12)
correctAnswer = playerChoice * pcRandom
question = "\(playerChoice) times \(pcRandom) is??"
}
func compareAnswer() {
let answerModified = enteredAnswer
let answerModified2 = answerModified.trimmingCharacters(in: .whitespacesAndNewlines)
if Int(answerModified2) == correctAnswer {
scoreCount += 1
title2 = "RIGHT"
}
else {
title2 = "WRONG"
}
if gameRound > questionCount {
alertTitle = "Game Ended"
alertMessage = "You got \(scoreCount) over \(questionCount)"
alertEndGame = true
}
else {
refreshGame()
}
gameRound += 1
gameRound += 1
}
}
var settings = setting()
struct ContentView: View {
var body: some View {
VStack {
Section (header: Text("Getting Your Settings Righttt").font(.title)) {
Form {
Stepper(value: settings.$playerChoice, in: 1...13, step: 1) { //value of type 'setting' ha no member '$playerChoice'
if settings.playerChoice == 13 {Text("All")}
else {
Text("Multiplication table \(settings.playerChoice)")
}
}
}
Form {
Text("Number of Questions?")
Picker(selection: settings.$questionCount, label: Text("Number of Questions?")) { //value of type 'setting' has no member '$questionCount'
ForEach (settings.questionCountArray, id: \.self) {Text("\([=12=])")} } ////value of type 'setting' ha no member '$questionCountArray'
.pickerStyle(SegmentedPickerStyle())
}
Spacer()
Button("Tap to start") {
settings.refreshGame
}
}
Section (header: Text("Game Play").font(.title)){
Text(settings.question)
TextField("Enter your answer", text: settings.$enteredAnswer, onCommit: settings.compareAnswer) //value of type 'setting' ha no member '$enteredAnswer'
Text("Your score is currently \(settings.scoreCount)")
Text("This is game round \(settings.gameRound) out of \(settings.questionCount)")
}
Spacer()
}
.alert(isPresented: settings.$alertEndGame) {
Alert(title: Text("Game Ended"), message: Text("You reached score \(settings.scoreCount) out of \(settings.questionCount)"), dismissButton: .default(Text("Play Again"))) //game doesnt restart and refresh
}
}
}
好吧,我没有检查逻辑,但是下面的固定代码至少可以编译,希望对您有所帮助
import SwiftUI
import Combine
class Setting: ObservableObject {
@Published var playerChoice : Int = 0
var questionCount : Int = 0
@Published var questionCountArray = [String]()
var pcRandom : Int = 0
var correctAnswer = 0
var question : String = ""
var buttonArray = [Int]()
@Published var enteredAnswer = ""
var gameRound : Int = 0
var scoreCount : Int = 0
var title2 = ""
var alertTitle = ""
var alertMessage = ""
@Published var alertEndGame = false
func refreshGame() {
pcRandom = Int.random(in: 1 ... 12)
correctAnswer = playerChoice * pcRandom
question = "\(playerChoice) times \(pcRandom) is??"
}
func compareAnswer() {
let answerModified = enteredAnswer
let answerModified2 = answerModified.trimmingCharacters(in: .whitespacesAndNewlines)
if Int(answerModified2) == correctAnswer {
scoreCount += 1
title2 = "RIGHT"
}
else {
title2 = "WRONG"
}
if gameRound > questionCount {
alertTitle = "Game Ended"
alertMessage = "You got \(scoreCount) over \(questionCount)"
alertEndGame = true
}
else {
refreshGame()
}
gameRound += 1
gameRound += 1
}
}
struct ASFContentView: View {
@ObservedObject var settings = Setting()
var body: some View {
VStack {
Section (header: Text("Getting Your Settings Righttt").font(.title)) {
Form {
Stepper(value: $settings.playerChoice, in: 1...13, step: 1) { //value of type 'setting' ha no member '$playerChoice'
if settings.playerChoice == 13 {Text("All")}
else {
Text("Multiplication table \(settings.playerChoice)")
}
}
}
Form {
Text("Number of Questions?")
Picker(selection: $settings.questionCount, label: Text("Number of Questions?")) { //value of type 'setting' has no member '$questionCount'
ForEach (settings.questionCountArray, id: \.self) {Text("\([=10=])")} } ////value of type 'setting' ha no member '$questionCountArray'
.pickerStyle(SegmentedPickerStyle())
}
Spacer()
Button("Tap to start") {
self.settings.refreshGame()
}
}
Section (header: Text("Game Play").font(.title)){
Text(settings.question)
TextField("Enter your answer", text: $settings.enteredAnswer, onCommit: settings.compareAnswer) //value of type 'setting' ha no member '$enteredAnswer'
Text("Your score is currently \(settings.scoreCount)")
Text("This is game round \(settings.gameRound) out of \(settings.questionCount)")
}
Spacer()
}
.alert(isPresented: $settings.alertEndGame) {
Alert(title: Text("Game Ended"), message: Text("You reached score \(settings.scoreCount) out of \(settings.questionCount)"), dismissButton: .default(Text("Play Again"))) //game doesnt restart and refresh
}
}
}