(Swift) Вызов функции в постановке охраны

Я пытаюсь вызвать функцию с именем 'nextPage' в защитном операторе, но она говорит, что '()' не конвертируется в 'Bool'. Что мне нужно сделать, чтобы вызвать эту функцию

@IBAction func nextPressed(_ sender: Any) {
    let geoCoder = CLGeocoder()
    geoCoder.geocodeAddressString(address) { (placemarks, error) in
        guard
            let placemark = placemarks?.first,
            let latVar = placemark.location?.coordinate.latitude,
            let lonVar = placemark.location?.coordinate.longitude,
            nextPage() // Error - '()' is not convertible to 'Bool'
            else {
                print("no location found")
                return
        }
    }
}

2 ответа

Решение

Защитное заявление используется, чтобы проверить, выполнено ли определенное условие. Вы не можете поместить функцию, которая не возвращает истину или ложь в этом утверждении.

Ссылка: https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Statements.html

Я верю, что вы пытаетесь достичь

@IBAction func nextPressed(_ sender: Any) {
        let geoCoder = CLGeocoder()
        geoCoder.geocodeAddressString(address) { (placemarks, error) in
            guard
                let placemark = placemarks?.first,
                let latVar = placemark.location?.coordinate.latitude,
                let lonVar = placemark.location?.coordinate.longitude
                else {
                    print("no location found")
                    return
            }

            // will only get executed of all the above conditions are met
            nextPage() // moved outside the guard statement

        }
}

Вы должны либо вызвать функцию, которая возвращает логическое значение, либо не делать этого внутри оператора предиката guard, потому что это неподходящее место для вызова функций. Вы должны сделать что-то вроде

guard variable != nil else {
    //handle nil case
}

// continue work with variable, it is guaranteed that it’s not nil.
Другие вопросы по тегам