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

查看所有标签

猜你喜欢:

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

Once Upon an Algorithm

Once Upon an Algorithm

Martin Erwig / MIT Press / 2017-9-8 / GBP 22.95

How Hansel and Gretel, Sherlock Holmes, the movie Groundhog Day, Harry Potter, and other familiar stories illustrate the concepts of computing. Picture a computer scientist, staring at a screen and......一起来看看 《Once Upon an Algorithm》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

URL 编码/解码
URL 编码/解码

URL 编码/解码

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具