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
的初始值设定项。对示例进行稍微修改后的版本,符合 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
}
}
关于swift - 我想制作一个自定义 bool ,它具有 bool 等所有属性,但默认值应该是 "true"而不是 "false",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37295727/