Swift Generics – 调用哪种方法?
发布时间:2020-12-14 04:41:26 所属栏目:百科 来源:网络整理
导读:假设以下玩具示例: protocol AwesomeType: Equatable { var thingy: Int { get }}extension Array where Element: Equatable { func doThing { ... }}extension Array where Element: AwesomeType { func doThing { ... }}extension String: AwesomeType {
假设以下玩具示例:
protocol AwesomeType: Equatable { var thingy: Int { get } } extension Array where Element: Equatable { func doThing { ... } } extension Array where Element: AwesomeType { func doThing { ... } } extension String: AwesomeType { var thingy: Int { return 42 } } 如果我有一个字符串数组 – [“Foo”,“Bar”,“Baz”] – 我在其上调用doThing(),将调用哪个实现?为什么? 我相信这是在编译时确定的;换句话说,它不是一个动态的调度.但它是如何确定的?感觉它类似于协议扩展的规则,但这是一个动态的调度情况…… 解决方法
它会产生一个
使用简单修改的??示例: protocol AwesomeType: Equatable { } extension Array where Element: Equatable { func doThing() { print("array one") } } extension Array where Element: AwesomeType { func doThing() { print("array two") } } extension String: AwesomeType { } let arr = [ "Foo","Bar","Baz" ] arr.doThing() 编译器抱怨
编译器根本不知道调用哪一个,因为这两个方法具有相同的名称和参数. 具有相同但实际上不相关的多个方法总是会导致一些编译器问题的风险,当这两个方法最终在某个时刻重叠时. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- cocos2dx 启动渲染过程
- c# – 当DataSource不返回完整的结果集时,手动设置GridView
- 依赖属性 dependency property WPF,为什么要用DDP?
- C# 以管理员身份运行WinForm程序
- c# – 如何通过在模型类上使用Display(prompt)属性在支架视
- c# – 使用wsHttpBinding的WCF服务 – 操作HTTP请求标头
- swift获取手机通讯录列表
- Oracle 数据库查看client的用户登录信息包括ip
- Flex 3 AdvancedDataGrid的使用(三)
- WCF - 序列化(DataContractSerializer, XmlSerializer, Dat