美文网首页
[翻译]Swift Optionals:何时使用'if-

[翻译]Swift Optionals:何时使用'if-

作者: NikoXu | 来源:发表于2015-11-23 13:22 被阅读1186次

    本文由NikoXu (iOS 爱好者) 翻译

    Swift Optionals:什么是Optional ?
    Swift Optionals:何时使用'!'和'?' ?
    Swift Optionals:何时使用'if-let' ?
    Swift Optionals:何时使用'as?'和'as' ?

    何时使用'if-let'##

    if-let是swift语言里的一种特殊的结构体(special structure),它允许检查一个Optional类型所持有的值并且对它解包后执行相应代码。让我们看看下面的代码:

    if let nav = controller.navigationController {
        nav.pushViewController(myViewController, animated: true)
    } else {
        //show an alert ot something else
    }
    

    if-let的结构体解包了controller.navigationController(编译器检测到这里被储存了值就会使用这个值)然后把它的值存到nav常量里。于是你可以在if的第一个分支里面使用nav。要注意的是在if语句里面,你再也不需要?!。能意识到nav实际上是一个UINavigationController类型而不是一个可选型(Optional type)非常的重要,这样你可以直接使用它的值(If you remember in contrast the navigationController’s original type is UINavigationController?)。

    if-let在另一种情形下是非常有用的。想象一下用你的navigationController代替单个方法调用你想做的东西。如果你不使用if-let你的代码将是这样的:

    controller.navigationController?.hidesBarsOnSwipe = true
    controller.navigationController?.hidesBarsOnTap = true
    controller.navigationController?.navigationBarHidden = false
    controller.navigationController?.popToRootViewControllerAnimated(true)
    

    虽然这样你的代码是可以按预期来运作,但是你需要解包(unwrap)四次并且你的代码变得是非累赘。然而一旦使用if-let解包了对象,你的代码将变得更清晰漂亮和快捷:

    if let nav = controller.navigationController {
      nav.hidesBarsOnSwipe = true
      nav.hidesBarsOnTap = true
      nav.navigationBarHidden = false
      nav.popToRootViewControllerAnimated(true)
    }
    

    是不是更加优雅了?

    小贴士
    nav在上述的例子中是以常量存在的。你可以用它来对它的属性进行修改,用它调用你需要的方法,但是你不能修改nav。值得注意的是你可以简单的用if var实现这样的功能。效果是一样的,但是你可以用一个解包的变量(unwrapped variable)来代替解包的常量(unwrapped constant),这样一来你可以按你的想法来改变它的值。

    关于最后一种我想讲到的情形是使用Optional数据类型的类型转换(type casting)。请阅读Swift Optionals:何时使用'as?'和'as' ?

    如何使用Optionals请阅读##

    Swift Optionals:什么是Optional ?
    Swift Optionals:何时使用'!'和'?' ?
    Swift Optionals:何时使用'if-let' ?
    Swift Optionals:何时使用'as?'和'as' ?

    翻译菌: 因为是分次翻译的,所以把原文分成4个较小的篇幅来翻译的。在学习Swift的路途上,如有不妥,望指正。

    相关文章

      网友评论

          本文标题:[翻译]Swift Optionals:何时使用'if-

          本文链接:https://www.haomeiwen.com/subject/zaolhttx.html