How do you unwrap Swift optionals?

前端 未结 5 1202
难免孤独
难免孤独 2020-11-27 04:14

How do you properly unwrap both normal and implicit optionals?

There seems to be confusion in this topic and I would just like to have a reference for all of the way

5条回答
  •  暗喜
    暗喜 (楼主)
    2020-11-27 05:14

    There are many similarities and just a handful of differences.

    (Regular) Optionals

    • Declaration: var opt: Type?

    • Unsafely unwrapping: let x = opt!.property // error if opt is nil

    • Safely testing existence : if opt != nil { ... someFunc(opt!) ... } // no error

    • Safely unwrapping via binding: if let x = opt { ... someFunc(x) ... } // no error

    • Safely chaining: var x = opt?.property // x is also Optional, by extension

    • Safely coalescing nil values: var x = opt ?? nonOpt

    Implicitly Unwrapped Optionals

    • Declaration: var opt: Type!

    • Unsafely unwrapping (implicit): let x = opt.property // error if opt is nil

      • Unsafely unwrapping via assignment:
        let nonOpt: Type = opt // error if opt is nil

      • Unsafely unwrapping via parameter passing:
        func someFunc(nonOpt: Type) ... someFunc(opt) // error if opt is nil

    • Safely testing existence: if opt != nil { ... someFunc(opt) ... } // no error

    • Safely chaining: var x = opt?.property // x is also Optional, by extension

    • Safely coalescing nil values: var x = opt ?? nonOpt

提交回复
热议问题