enum MyBool {
case myTrue, myFalse
}
/// A value type whose instances are either `true` or `false`.
extension MyBool {
/// Default-initialize Boolean value to `true`.
init(){ self = .myTrue }
}
extension MyBool : BooleanLiteralConvertible {
static func convertFromBooleanLiteral( value: Bool) -> MyBool {
return value ? myTrue : myFalse
}
}
extension MyBool : BooleanType {
var boolValue: Bool {
switch self {
case .myTrue: return true
case .myFalse: return false
}
}
}
extension MyBool {
// MyBool can be constructed from BooleanType
init(_ v : BooleanType) {
if v.boolValue {
self = .myTrue
} else {
self = .myFalse
}
}
}
问题是mybool不符合协议BooleanLiteralConvertible。谁能指出我正确的方向。
符合BooleanLiteralConvertible
需要添加一个接受BooleanLiteralType
又名Bool
的初始值设定项。符合BooleanLiteralConvertible
和BooleanType
的示例的略微修改版本:
enum MyBool: BooleanLiteralConvertible, BooleanType {
case myTrue
case myFalse
var boolValue: Bool {
return self == .myTrue
}
init() {
self = .myTrue
}
init(booleanLiteral value: Bool) {
self = value ? .myTrue : .myFalse
}
}