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

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

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

查看所有标签

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

解决网页设计一定会遇到的210个问题

解决网页设计一定会遇到的210个问题

2006-4 / 42.00元

如何选择适合、简单、方便、快速的方法来解决您的网页设计问题?不会HTML、JavaScript、CSS也可轻易完成许多网页功能与特效。本书包含上百种HTML、JavaScript、CSS使用应用技巧与盲点解说,包含10个常用表单资料判断函数与特殊技巧,不必修改就可用于任何网页。本书现有的多数网页设计书籍相辅相成,让您事半功倍地完成工作。   许多计算机书籍都是从某个语言或者某个软件的......一起来看看 《解决网页设计一定会遇到的210个问题》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

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

Markdown 在线编辑器

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

HSV CMYK互换工具