Swfit 4:我如何获得Optional <x>来打印包含`Optional`的描述

时间:2018-05-25 08:30:59

标签: swift swift4

我知道“引擎盖下”的可选值表示为public enum Optional<Wrapped> { case none case some(Wrapped) } 枚举...

Optional

在某种程度上,这对开发人员来说是隐藏的(出于正当理由),因此在打印选项时,默认行为(在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)" 或只有价值。

XCTAssertEqual(Int("99"), 11)

无论如何都要获得一个可选的完整和真实的描述,即“Optional.none”或“Optional.some(99)”

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

for i in range(0,5): password = str(input("Enter password: ")) password_checker_result = password_checker(password) if not password_checker_result: print("Invalid password") else: print("Valid password") break

  

XCTAssertEqual失败:(“Optional(99)”)不等于(“Optional(11)”)

1 个答案:

答案 0 :(得分:1)

我认为XCTest使用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)