将函数定义为返回可选但返回非可选函数

时间:2014-06-18 18:04:53

标签: swift

在下面的代码中,为什么expectingThisToBeOptional类型为String而不是String类型!当getOptional()返回一个String!

func getOptional() -> String!
{
    var s:String! = "Hello"
    return s
}


if let expectingThisToBeOptional = self.getOptional()
{
      // attempting to use expectingThisToBeOptional! gives error saying type is String not String!
}
else
{
    // why does execution come here when run?
}

2 个答案:

答案 0 :(得分:1)

if let语法解包可选项;当可选项为else时,将执行nil块。

此外,使用!(而不是?)定义的选项是“隐含未解包”。这意味着您不需要使用myvar!语法(强制解包运算符)

有关可选(例如,String?)和隐式展开的可选(例如,String!

之间的差异的详细信息,请参阅this question

答案 1 :(得分:0)

当您使用if let语句时,您设置的常量包含可选的展开值(如果它具有值)。 self.getOptional()会将String!退回到String并将其分配到expectingThisToBeOptional