(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 ответа
Решение
Защитное заявление используется, чтобы проверить, выполнено ли определенное условие. Вы не можете поместить функцию, которая не возвращает истину или ложь в этом утверждении.
Я верю, что вы пытаетесь достичь
@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.