内容简介:最近更新:24th 九月, 2018今天学员群里有人提了这么一个问题,为什么把特性的字典类型作为范型类型约束的时候,就必然报错?显然,说的很明确了,“你不能从一个非协议、非类的类型继承”。显然,字典是个范型结构体……
最近更新:24th 九月, 2018
今天学员群里有人提了这么一个问题,为什么把特性的字典类型作为范型类型约束的时候,就必然报错?
inheritance from non-protocol, non-class type 'Dictionary<String, Any>'
显然,说的很明确了,“你不能从一个非协议、非类的类型继承”。显然,字典是个范型结构体……
那么解决思路也很明确了,创建一个类来装饰个字典或许是个不错的选择但太麻烦,那么就从协议上下手。
有条件的协议遵循
我们可以给字典这个结构体进行扩展,让它遵循一个我们的空协议:
protocol targetDictionaryType {}
但注意这里我们限定条件,即字典的 Key 必须是 String 类型:
extension Dictionary :targetDictionaryType where Key == String {}
内容全部为空,因为不用做任何额外的操作。
这样,我们就可以用这个协议来进行约束了,如果字典的类型不符合要求,那么这个字典就不会遵循我们的协议:
func test<T:targetDictionaryType>(dict:T) { ... }
测试结果
let d = ["":1] test(dict: d) //正常工作
let a = [1:1] test(dict: a) //error: cannot invoke 'test(dict:)' with an argument list of type '(dict: [Int : Int])'
以上所述就是小编给大家介绍的《Swift 中如何使用字典类型作为范型约束》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Objective C范型
- Kotlin 范型之泛型约束、类型投影、星号投影
- Rust中的范型编程-Exonum是如何从Iron转移到Actix-web
- 【Python—字典的用法】创建字典的3种方法
- Python 字典(Dictionary)
- python 数据类型 ----字典
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。