我确实有一个带有可选返回类型的函数。我对其产生的输出感到困惑。代码是这样的。
func displayAge(age: Int) -> Int? {
return 23
}
if var age = displayAge(age: 22) {
print("Age is correct")
} else {
print("Age is incorrect")
}
我将年龄设为22岁,由于年龄不正确,但我应该得到输出,但年龄却是正确的
答案 0 :(得分:1)
您似乎对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")
}
答案 1 :(得分:0)
我认为您更容易将其添加到返回布尔中,如@ Carpsen90在评论中所述。
func displayAge(age: Int) -> Bool {
}
在函数中,您可以通过以下方式检查其是否正确:
// check if age is 23
if age == 23 {
// then return true
return true
} else {
// otherwise return false
return false
}
但是要使该函数变小,您可以编写类似以下的代码,它将返回布尔值true或false。
// and for the code above you only need to write
return age == 23
调用该函数,看看您的年龄是否正确,并获取打印结果或您希望在该函数中使用的代码。
if displayAge(age: 22) {
// it's correct
print("Age is correct")
} else {
// otherwise incorrect
print("Age is incorrect")
}
如果您想使事情变得更简单,可以执行以下操作:
displayAge(age: 22) ? print("Age is correct") : print("Age is incorrect")