swift – 在扩展中重新声明成员隐藏原始成员*有时*.为什么?
发布时间:2020-12-14 04:32:05 所属栏目:百科 来源:网络整理
导读:偶然的机会,我发现你可以在没有编译器抱怨的情况下做到这一点: extension Date { var timeIntervalSinceNow: TimeInterval { return 1000 }} 更奇怪的是,这实际上是评估为1000: Date().timeIntervalSinceNow 扩展似乎隐藏了原始成员. 所以我试着用我自己的
偶然的机会,我发现你可以在没有编译器抱怨的情况下做到这一点:
extension Date { var timeIntervalSinceNow: TimeInterval { return 1000 } } 更奇怪的是,这实际上是评估为1000: Date().timeIntervalSinceNow >扩展似乎隐藏了原始成员. 所以我试着用我自己的班级做到这一点: class A { var a: String { return "A" } } extension A { var a: String { return "a" } } >并且无法编译:“无效重新声明’a’”. 我观察到这不会影响原始成员通过协议的使用,这是隐藏的预期行为: extension Date { var description: String { return "XXXX" } } let date: CustomStringConvertible = Date() date.description // normal date Date().description // "XXXX" 你能解释为什么子弹出现了现象吗? 解决方法
这是有效的,因为您在与原始变量声明不同的模块中声明此扩展.
在模块中,变量名称可以重载,但在我看来这是Swift的一个缺点,因为目前没有办法明确说明你想要的模块声明. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |