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

标签 swift

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 协议(protocol)。 谁能指出我正确的方向吗?

最佳答案

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

关于swift - 我想制作一个自定义 bool ,它具有 bool 等所有属性,但默认值应该是 "true"而不是 "false",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37295727/

相关文章:

ios - Swift 中的对象初始化

swift - 收据验证 iOS - 文件无法打开,因为没有这样的文件

arrays - 数组元素的快速返回索引

string - 快速将字符串转换为 CLLocationCoordinate2D

swift - 无法将 NSButton 添加到 Sprite-Kit 场景

ios - 如何快速将文本字段的文本带到渐变背景的前面

ios - UIImageView,更改 .image 导致重新布局 - 可以避免吗?

ios - 使用未知的编码键和值进行 Swift 解码

ios - 快速查找附近的蓝牙设备

swift - .toInt() 在 Swift 2 中被移除了吗?