在下面的代码中,为什么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?
}
答案 0 :(得分:1)
if let
语法解包可选项;当可选项为else
时,将执行nil
块。
此外,使用!
(而不是?
)定义的选项是“隐含未解包”。这意味着您不需要使用myvar!
语法(强制解包运算符)
有关可选(例如,String?
)和隐式展开的可选(例如,String!
)
答案 1 :(得分:0)
当您使用if let
语句时,您设置的常量包含可选的展开值(如果它具有值)。 self.getOptional()
会将String!
退回到String
并将其分配到expectingThisToBeOptional
。