ios – Swift – 是否有布尔可转换协议或任何其他方式将转换重载为自定义类型?

ios – Swift – 是否有布尔可转换协议或任何其他方式将转换重载为自定义类型?,第1张

概述我创建了一个模仿布尔值的枚举,我希望能够自动将真正的布尔值转换为此自定义类型. 由于BooleanLiteralConvertible协议(参见下文),因此可以使用文字布尔值. 是否存在非文字布尔值的等效协议?或者有没有办法超载as? *** 作符? enum CustomType { case True case False}extension CustomType : Boolea 我创建了一个模仿布尔值的枚举,我希望能够自动将真正的布尔值转换为此自定义类型.

由于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 – 是否有布尔可转换协议或任何其他方式将转换重载为自定义类型?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1049754.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存