我正在尝试制作一种可以在(str)中键入内容的表格,一个可以在其中键入内容的TextField以及下面的一些文本(变量=正确),让我知道到目前为止是否正确。
例如,(str)=“ hello world”,如果文本字段中包含“ hel”,则下面的文本将显示为“ True”。 问题是我似乎无法正确使用(str)和(field)。我在这里似乎遇到了类似的问题,这些问题可以通过“懒惰”解决,但不会起作用,因为(“带有包装器的属性“字段”也不能是懒惰的”)。
func stringSlice(string: String, first: Int, last: Int)->String{
var newStr = ""
for number in 0..<string.count{
if first <= number{
if number <= last{
newStr += "\(string[string.index(string.startIndex, offsetBy: number)])"
}
}
}
return newStr
}
func checkSoFar(answer: String, guess: String)->String{
if stringSlice(string: answer, first: 0, last: guess.count) == guess{
return "True"
}
return "False"
}
struct thisView: View{
var str = "Hello world!"
@State private var field = ""
@State private var correct = checkSoFar(answer: str, guess: field)
var body: some View{
Form{
Text(self.str)
TextField("Type the above", text: $field){
}
Text(correct)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
thisView()
}
}
任何想法将不胜感激。谢谢。
答案 0 :(得分:0)
最简单的解决方案是删除correct
属性并执行
var body: some View{
Form{
Text(self.str)
TextField("Type the above", text: $field){
}
Text(checkSoFar(answer: str, guess: field))
}
}
但这也许也是一种前进的方法:按下按钮时调用checkSoFar
函数
struct thisView: View{
var str: String = "Hello World!"
@State private var field: String = ""
@State private var correct: String = ""
init(answer: String) {
str = answer
}
var body: some View{
Form{
Text(self.str)
TextField("Type the above", text: $field){
}
Text(correct)
Button("Try") {
self.correct = checkSoFar(answer: self.str, guess: self.field)
}
}
}
}