Swift中的可选函数,带有返回类型

时间:2018-11-04 10:30:38

标签: swift

我确实有一个带有可选返回类型的函数。我对其产生的输出感到困惑。代码是这样的。

func displayAge(age: Int) -> Int? {
    return 23
}

if var age = displayAge(age: 22) {
    print("Age is correct")
} else {
    print("Age is incorrect")
}

我将年龄设为22岁,由于年龄不正确,但我应该得到输出,但年龄却是正确的

2 个答案:

答案 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")