我知道“引擎盖下”的可选值表示为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)”)
答案 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)