Próbuję utworzyć formularz, który będzie zawierał coś do wpisania (ciąg znaków), pole tekstowe do wpisania i jakiś tekst poniżej (zmienna = poprawna), aby dać mi znać, czy do tej pory mam to poprawne.

Na przykład (str) = "hello world", jeśli "hel" znajduje się w polu tekstowym, tekst poniżej będzie brzmiał "True". Problem polega na tym, że nie mogę uzyskać prawidłowego użycia (str) i (pole). Wydaje mi się, że podobne pytania są tutaj rozwiązywane za pomocą „leniwych”, ale to nie zadziała, ponieważ („Pole właściwości” z opakowaniem nie może być również leniwe ”).

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

Wszelkie pomysły będą mile widziane. Dziękuję Ci.

0
Joshua Lancaster 13 styczeń 2020, 12:57

1 odpowiedź

Najlepsza odpowiedź

Najprostszym rozwiązaniem byłoby usunięcie właściwości correct i zrobienie tego

var body: some View{
    Form{
        Text(self.str)
        TextField("Type the above", text: $field){
        }
        Text(checkSoFar(answer: str, guess: field))
    }
}

Ale może to też może być droga naprzód: wywołanie funkcji checkSoFar po naciśnięciu przycisku

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

        }
    }
}
0
Joakim Danielson 13 styczeń 2020, 10:42