我创建了一个模仿布尔值的枚举,我希望能够自动将真正的布尔值转换为这个自定义类型。
由于 BooleanLiteralConvertible 协议(见下文),可以为文字布尔值做到这一点。
是否有非文字布尔值的等效协议?或者有没有办法重载as?操作员 ?
enum CustomType {
case True
case False
}
extension CustomType : BooleanLiteralConvertible {
init(booleanLiteral value: BooleanLiteralType) {
if value {
self = .True
} else {
self = .False
}
}
}
func def(a: CustomType) {
}
func test() {
let a : Bool = true
def(true) // compiles
def(a) // does not compile
}
Run Code Online (Sandbox Code Playgroud)