为什么不守护创建unwrapped var?

4th*_*ace 2 ios forced-unwrapping swift2 guard-statement

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

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

错误:可选类型'String?'的值 没有打开; 你的意思是用'!' 要么 '?'?return fmt.stringFromNumber(unwrapped)

Cod*_*ent 8

这不是变数unwrapped.它是stringFromNumber:它返回一个可选字符串.但是你的函数返回一个字符串,因此你必须解包:

return fmt.stringFromNumber(unwrapped)!
Run Code Online (Sandbox Code Playgroud)

这两者之间有区别:

return fmt.stringFromNumber(unwrapped!)
return fmt.stringFromNumber(unwrapped)!
Run Code Online (Sandbox Code Playgroud)