swift - 我在操场上尝试“守卫”,但我得到了意想不到的结果
问题描述
我有代码(returning
是一个函数)
该函数显然返回 nil,但不会触发 else 块。
var returns: String?
func returning() -> String {
return nil
}
func nilTest() {
guard returning != nil else {
return
}
print(returning)
print("Success")
}
输出:
(功能)
成功
解决方案
var returns: String?
func returning() -> String? {
return nil
}
func nilTest() {
/// Here you use function `returning` as a variable.
/// Not its value
guard returning != nil else {
return
}
print(returning)
print("Success")
}
问题是returning
在您的代码中只是一个函数。不是函数的结果。它有一个函数类型() -> String?
。不是一个String?
。
要解决此问题,请使用:
guard returning() != nil else {
return
}
反而。
或者,这更明显:
let myString = returning()
guard myString != nil else {
return
}
推荐阅读
- python - 在python中按数字顺序打印输出
- flutter - 在 pubspec.yaml 的颤振中找不到图像文件
- tarantool - 我可以使用 mysql 或 psql 控制台连接到 Tarantool 吗?
- amazon-iam - IAM 拒绝对 SFProRole 的无服务器访问
- javascript - 根据移动语言方向更改 React Native 应用名称
- javascript - iText 7 使用 JS 脚本为 PDF 报告添加水印
- ansible - 如何访问远程主机上角色/文件下的文件
- parse-platform - 在 Parse 上安排推送通知
- python - 返回字符串中固定的数字行(数量)?
- angular - Angular 8 - 路由未发生 - 垫表行