当前位置: 首页 > 知识库问答 >
问题:

(Swift)Guard语句中的调用函数

许寒
2023-03-14

我试图在一个保护语句中调用一个名为“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个答案

宗政子琪
2023-03-14

您应该要么调用返回布尔值的函数,要么不要在Guard谓词语句中执行此类操作,因为它不是调用函数的合适位置。你应该这样做

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

// continue work with variable, it is guaranteed that it’s not nil.
董良策
2023-03-14

guard 语句用于检查是否满足特定条件。您不能将不返回 true 或 false 的函数放在该语句中。

参考: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

        }
}
 类似资料:
  • 根据我对声明的理解,我正在做以下工作: 我只想了解一下,我们是否可以在 语句中创建一个变量,并在函数的其余部分访问它?或者保护语句是否旨在立即返回或引发异常? 还是我完全误解了声明的用法?

  • 问题内容: 我试图将一个函数传递给另一个函数,然后使传递的函数执行并传递给它一个变量。 这是我的代码: 我得到的错误是 错误是“无法将’String’的值类型转换为预期的参数类型’()’。我知道这是语法问题-只是不知道它应该是什么。 问题答案: Rob的答案是正确的,尽管我想分享一个简单的工作回调/完成处理程序的示例,但是您可以在下面下载示例项目并尝试使用的输入。 斯威夫特5: 重要说明:

  • 问题内容: 我正在学习Swift的语法,想知道为什么下面的代码无法按我期望的那样工作: 我想每次将数字除以3(3、6、9、12等)时都打印Fizz,并且每次将其除以5时都打印Buzz,那么缺少哪一块拼图? 注意:我确实使用以下方法解决了问题: 我想知道如何使用Switch解决此问题。谢谢。 问题答案: FizzBu​​zz游戏的通常规则 是用“ Fizz”替换每个3的倍数,用“ Buzz”替换每个

  • 我可能有些小问题 如何在bash中调用if语句中定义的函数? 看看我的例子: 所以我的想法是,当我运行脚本时,让我们称之为测试。sh它在bash中运行脚本exp: 我不知道如何创造这样的东西,也许你们中的一些人可以在这方面帮助我。 先谢谢你

  • 有一个类似命名的主题,但该示例是由于用户错误而导致的错误。我相信这个例子是一个实际的XCode问题。 我正在学习一个树屋教程,本着swift2.0的精神,我在初始化程序中使用了guard语句而不是if-lets。我的代码与指令相同,只是使用了警戒语句。它有一个错误,表示“未初始化所有存储属性就从初始化程序返回”。一旦我把它改为if-let语句,它就起作用了。也许我在什么地方犯了错误,但我盯着它看了

  • Swift 2 引入了 关键字,该关键字可用于确保各种数据已配置就绪。我在这个网站上看到的一个例子演示了一个提交已开发的功能: 我想知道使用< code>guard与使用< code>if条件的老式方法有什么不同。它能给你带来用简单的支票无法得到的好处吗?