swift - Swift 中具有返回类型的可选函数
问题描述
我确实有一个带有可选返回类型的函数。我对它产生的输出感到困惑。代码是这样的。
func displayAge(age: Int) -> Int? {
return 23
}
if var age = displayAge(age: 22) {
print("Age is correct")
} else {
print("Age is incorrect")
}
我过了 22 岁,我应该得到一个输出,因为年龄不正确,但我得到年龄是正确的
解决方案
您似乎对这个可选的绑定 if 语句感到困惑:
if var age = displayAge(age: 22) {
print("Age is correct")
} else {
print("Age is incorrect")
}
这将执行以下操作:
- 调用
displayAge(age: 22)
,检查其返回值 - 如果返回值不是
nil
- 将返回值赋给变量
age
print("Age is correct")
- 将返回值赋给变量
- 否则
print("Age is incorrect")
它不检查是否22
等于23
。它总是会打印Age is correct
,因为displayAge
总是返回Optional(23)
,但事实并非如此nil
。
您可以像这样检查 22 是否等于 23:
func displayAge() -> Int { return 23 }
if 22 == displayAge {
print("Age is correct")
} else {
print("Age is incorrect")
}
或者如果你真的想使用可选绑定,
func displayAge(age: Int) -> Int? { return 23 == age ? 23 : nil }
if let _ = displayAge(age: 22) {
print("Age is correct")
} else {
print("Age is incorrect")
}
推荐阅读
- ios - UNCalendarNotificationTrigger 不适用于本地通知
- dialogflow-es - Dialogflow CX 中是否有默认变量将用户输入作为值?
- javascript - 如果单击按钮,则使用选项卡转到列表中的第一个链接
- asp.net-core-mvc - .net core api + jwt 认证 + .net core mvc 客户端
- c++ - 结构化绑定声明的令人困惑的错误
- javascript - 从 AJAX 响应中调用 jQuery
- sql - 我应该直接从服务器运行 select * 还是在填充选择器时创建一个存储过程?
- search - Prolog 事实可以用于对抗性搜索吗?
- java - 当@Transactional(readonly=true) 方法调用@Transactional(readonly=false) 方法时会发生什么,反之亦然?
- javascript - 根据内部内容调整 HTML 画布的大小