隐式展开可选项和打印



我正在学习Swift,我对隐式取消包裹的可选选项有疑问。

我有一个返回String可选的函数:

func findApt(aptNumber :String) -> String?
{
    let aptNumbers = ["101", "202", "303", "404"]
    for element in aptNumbers
    {
        if (element == aptNumber)
        {
            return aptNumber
        }
    } // END OF for LOOP
    return nil
}

和一个if语句来执行安全的解包裹,它使用隐式解包裹可选作为其常量:

if let apt :String! = findApt("404")
{
    apt
    println(apt)
    println("Apartment found: (apt)")
}

在第一行apt展开自己(结果窗格显示"404"),但在其他两行apt没有展开:结果窗格和控制台都显示打印的值是Optional("404")Apartment found: Optional("404"),为了让404出现在控制台上,我必须使用!符号,如果我理解正确的话,它只需要手动展开常规的可选项。

为什么会发生?

我的猜测是,当传递给println()时,apt被隐式地从隐式解包可选转换为常规可选,这导致可选("404")文本出现,但我想要一些关于这件事的专家建议,因为我只是一个初学者的语言。

let apt :String! = findApt("404")不会展开可选的,因为您显式地使用了可选类型String!

如果你想打开可选的,使用:

if let apt: String = findApt("404")
{
  ...
}

或者更好,使用类型推断:

if let apt = findApt("404")
{
  ...
}

在第一行中,apt自动展开(结果窗格)显示"404"),但在其他两行中apt没有展开结果窗格和控制台显示打印的值为可选("404")和公寓查找:可选("404"),并按顺序为404出现在控制台我必须使用!符号,如果我理解正确,只需要手动展开常规即可可选。

为什么会发生?

这就是控制台/游乐场显示值的方式。在您的代码示例中,apt仍然是Optional

您可以在运行时使用dynamicType检查类型,即println(apt.dynamicType)

最新更新