Ios 为什么';t guard是否创建未包装变量?

Ios 为什么';t guard是否创建未包装变量?,ios,swift2,forced-unwrapping,guard-statement,Ios,Swift2,Forced Unwrapping,Guard Statement,为什么我需要在最终返回语句中展开变量unwrapped?难道警卫不应该处理这件事吗 func test() -> String { let fmt = NSNumberFormatter() let myValue:Double? = 9.50 guard let unwrapped = myValue else { return "" } return fmt.stringFromNumber(unwrapped) } 错误:可选

为什么我需要在最终返回语句中展开变量
unwrapped
?难道警卫不应该处理这件事吗

func test() -> String {
    let fmt = NSNumberFormatter()
    let myValue:Double? = 9.50
    guard let unwrapped = myValue else {
        return ""
    }
    return fmt.stringFromNumber(unwrapped)
}
错误:可选类型“字符串”的值未展开;你是故意的吗 使用“!”还是“?”? 返回fmt.stringFromNumber(未包装)


它不是变量
展开的
。它是
stringFromNumber
:它返回一个可选字符串。但函数返回字符串,因此必须展开:

return fmt.stringFromNumber(unwrapped)!
这两种方法之间有区别:

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