我知道“底层”的可选值表示为 Optional
枚举...
public enum Optional<Wrapped> {
case none
case some(Wrapped)
}
在某种程度上,这对开发人员是隐藏的(有充分的理由),因此当打印可选值时,默认行为(在 Swift 4 中)是省略 Optional
部分并简单地打印 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)"
是否有关于可选的完整和真实的描述,即“Optional.none”或“Optional.some(99)”
我确信这是可能的,因为 XCTest 在打印失败消息时会以某种方式执行此操作,例如...
XCTAssertEqual(Int("99"), 11)
XCTAssertEqual failed: ("Optional(99)") is not equal to ("Optional(11)")
最佳答案
我认为 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)
关于swift - swift 4 : How can I get Optional<X> to print a description that includes `Optional` ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50524838/