为什么 guard 不创建未包装的 var?

Why doesn't guard create unwrapped var?

为什么我需要在最后的 return 语句中解包变量 unwrapped?守卫不应该处理这个吗?

func test() -> String {
    let fmt = NSNumberFormatter()
    let myValue:Double? = 9.50
    guard let unwrapped = myValue else {
        return ""
    }
    return fmt.stringFromNumber(unwrapped)
}

error: value of optional type 'String?' not unwrapped; did you mean to use '!' or '?'? return fmt.stringFromNumber(unwrapped)

不是变量unwrapped。它是 stringFromNumber:它 returns 是一个可选字符串。但是你的函数 returns 是一个字符串,因此你必须解包:

return fmt.stringFromNumber(unwrapped)!

这两个有区别:

return fmt.stringFromNumber(unwrapped!)
return fmt.stringFromNumber(unwrapped)!