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

查看所有标签

猜你喜欢:

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

全栈开发之道

全栈开发之道

和凌志 / 电子工业出版社 / 68.00元

全栈(Full Stack)是一种全新的以前端为主导的框架,框架选型聚焦在MEAN(MongoDB、Express、AngularJS、Node.js)上。选用MEAN全栈技术,可以快速地实现敏捷开发,尤其是到了产品的运营阶段,其优势表现得非常明显。本书主要介绍MEAN全栈技术,分为入门篇、基础篇和实战篇,入门篇对全栈进行了概述,基础篇重点介绍了全栈的四个主要技术,即MongoDB、Express......一起来看看 《全栈开发之道》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具