我想让我的枚举轻松兼容@IBInspectable
,所以为了简单起见,我尝试用类型来表示它Bool
:
enum TopBarStyle: Bool {
case darkOnLight
case lightOnDark
}
但 Xcode 给了我:
原始类型“Bool”无法用任何文字表达
这很奇怪,因为true
and false
似乎是用文字表达的完美候选者。
我也尝试过添加RawRepresentable
符合 Bool 类型:
extension Bool: RawRepresentable {
public init?(rawValue: Bool) {
self = rawValue
}
public var rawValue: Bool {
get { return self }
}
}
但它并没有解决错误。
Swift 3 本身定义了这九种文字表示:
- ExpressibleByNilLiteral (
nil
)
- ExpressibleByBooleanLiteral (
false
)
- 通过数组文字表达 (
[]
)
- 可通过字典文字表达 (
[:]
)
- 可通过整数常量表示 (
0
)
- ExpressibleByFloatLiteral (
0.0
)
- ExpressibleByUnicodeScalarLiteral (
"\u{0}"
)
- 通过扩展图形簇文字表达 (
"\u{0}"
)
- 通过字符串文字表达 (
""
)
But enum
原始表示显然只会本地接受 https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Enumerations.html#//apple_ref/doc/uid/TP40014097-CH12-ID149以数字开头的表示的子集 (0
-9
), 一个牌子 (-
, +
)或引用("
):上面列表中的最后五个协议。
在我看来,错误消息应该更具体。也许像这样明确的东西会很好:
原始类型“Bool”无法用任何数字或带引号的字符串文字表示
扩展 Bool 以符合这些协议之一仍然是可能的,例如:
extension Bool: ExpressibleByIntegerLiteral {
public init(integerLiteral value: Int) {
self = value != 0
}
}
这样做之后,这段代码现在构建得很好:
enum TopBarStyle: Bool {
case darkOnLight
case lightOnDark
}
@IBInspectable var style = TopBarStyle(rawValue: false)!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)