Swift 中如何使用字典类型作为范型约束

栏目: Swift · 发布时间: 6年前

内容简介:最近更新:24th 九月, 2018今天学员群里有人提了这么一个问题,为什么把特性的字典类型作为范型类型约束的时候,就必然报错?显然,说的很明确了,“你不能从一个非协议、非类的类型继承”。显然,字典是个范型结构体……

最近更新:24th 九月, 2018

今天学员群里有人提了这么一个问题,为什么把特性的字典类型作为范型类型约束的时候,就必然报错?

Swift 中如何使用字典类型作为范型约束
用特定的字典类型作为范型类型约束会报错
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 中如何使用字典类型作为范型约束》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

如何把事情做到最好

如何把事情做到最好

乔治·伦纳德 / 张乐 / 中国青年出版社 / 2014-2 / 29.90元

•改变全球9800万人的人生指导书 •全美第一本系统阐述学习与成功之道的经典著作 •长期盘踞全美畅销书榜单 •21年后,这本传奇之书终于在中国震撼上市 •把事情做到最好,第一不强求天赋,第二不介意起步的早晚,你要做的就是“起步走”并“不停地走” 《如何把事情做到最好》出 版于1992年,经久不衰,经过一代又一代的读者口碑相传后,畅销至今。作者以其独特的视角告诉人们,如......一起来看看 《如何把事情做到最好》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器