由于BooleanliteralConvertible协议(参见下文),因此可以使用文字布尔值.
是否存在非文字布尔值的等效协议?或者有没有办法超载as? *** 作符?
enum CustomType { case True case False}extension CustomType : BooleanliteralConvertible { init(booleanliteral value: BooleanliteralType) { if value { self = .True } else { self = .False } }}func def(a: CustomType) {}func test() { let a : Bool = true def(true) // compiles def(a) // does not compile}解决方法 在Swift的早期版本中有一些功能可以支持这样的事情,并且它们被故意删除. Swift通常避免隐式类型转换.它们往往会爆炸编译时间,并且经常导致意外和不期望的转换.当前从T到T的隐式转换?是通用代码中混淆编译器错误和不正确的重载调用的常见原因.在没有对Swift编译器进行更多更改的情况下构建更多类似的东西是有问题的.即使是隐含的数字转换,Swift团队原则上表示这是理想的,但由于这些问题而且您需要明确转换,因此目前无法实现.
首选方法是在有用的情况下定义显式重载:
func def(a: Bool) { def(CustomType(a)) }总结
以上是内存溢出为你收集整理的ios – Swift – 是否有布尔可转换协议或任何其他方式将转换重载为自定义类型?全部内容,希望文章能够帮你解决ios – Swift – 是否有布尔可转换协议或任何其他方式将转换重载为自定义类型?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)