我想制作一个自定义布尔值,它具有布尔值等所有属性,但默认值应为 "true" 而不是"false"


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的初始值设定项。符合BooleanLiteralConvertibleBooleanType的示例的略微修改版本:

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
    }
}

最新更新