您能否安全地将一行嵌套的可选内容快速展开为一行?

时间:2018-11-09 12:06:52

标签: swift

我目前正在使用四行从mapViewDidSelectMKAnnotationView中解开标题。

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
    if let title = view.annotation?.title {
        if let title = title {
            // do something with title
        }
    }
}

我可以这样做而不必重新包装东西吗?像这样:

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
    if let title = view.annotation?.title? {
        // do something with title
    }
}

This answer似乎很贴近这个问题,但是没有解决最深的属性是可选的情况。看来这是一件微不足道的事情,我敢肯定一定有办法,但我无法弄清楚我一生的语法。

2 个答案:

答案 0 :(得分:2)

您可以这样做:

if let title = view.annotation?.title as? String {

}

view.annotation?.title是一个双精度可选字符串:String??,因为annotation的属性MKAnnotationView和它自己的属性title都是可选的。 / p>


您也可以像这样使用 guard 语句:

guard let title = view.annotation?.title as? String else {
    return 
}
//use title in the rest of the scope

您还可以使用switch语句:

switch title {
case .some(.some(let t)):
    //use the title here
    print(t)
default:
    break 
}

答案 1 :(得分:0)

要解开单个可选字符串,可以使用

let title = (view.annotation.title ?? nil)

然后您可以使用空合并来回退到默认字符串:

let title = (view.annotation.title ?? nil) ?? "fallback string"