代码之家  ›  专栏  ›  技术社区  ›  Oliver Pearmain

swfit 4:如何获取可选的<x>以打印包含“可选”的描述`

  •  1
  • Oliver Pearmain  · 技术社区  · 7 年前

    我知道“引擎盖下”的可选值表示为 Optional 枚举…

    public enum Optional<Wrapped> { case none case some(Wrapped) }

    在某种程度上,这对开发人员是隐藏的(出于合理的原因),因此,当打印选项时,默认行为(在swift 4中)是省略 可选 零件和简单打印 nil 或者仅仅是价值。

    let longFormDefinedOptionalInt: Optional<Int> = nil
    let shortFormDefinedOptionalInt: Int? = 99
    
    print("\(longFormDefinedOptionalInt)") // Prints "nil" and NOT "Optional.none"
    print("\(longFormDefinedOptionalInt)") // Prints "99" and NOT "Optional.some(99)"
    

    是否有对可选项的完整和真实描述,即“可选。无”或“可选。某些(99)”。

    我确信这是可能的,因为XCEST在打印失败消息时会以某种方式执行此操作,例如…

    XCTAssertEqual(Int("99"), 11)

    XCTaserEqual失败:(“可选(99)”)不等于(“可选(11)”)

    1 回复  |  直到 7 年前
        1
  •  1
  •   Sweeper    7 年前

    我认为XCEST使用 debugDescription :

    let a: Int? = 1
    print(a.debugDescription) // Optional(1)
    

    但是,使用 nil 值,此属性将返回 "nil" 而不是 "Optional.none" .

    您可以编写扩展名:

    extension Optional {
        var fullDescription: String {
            switch self {
            case .none:
                return "Optional.none"
            case .some(let value):
                return "Optional.some(\(value))"
            }
        }
    }
    
    let a: Int? = nil
    print(a.fullDescription)