Swift 关联类型详解

本文详细介绍了Swift中的关联类型,解释了它们与类型参数的区别,并通过实例展示了关联类型如何解决类型参数带来的问题。关联类型允许在协议中定义抽象的类型成员,使得在编译时可以有多个具体的类型实现,而不会过度污染类型定义。文章还探讨了关联类型在实际编程中的应用场景,如在处理CollectionType时的角色,以及与其他语言如C#的比较。最后,文章提到了使用关联类型时的一些限制和潜在问题,以及对Swift未来发展的期待。
摘要由CSDN通过智能技术生成

有时候我认为类型理论是故意弄的很复杂,以及所有的那些函数式编程追随者都只是胡说八道,仿佛他们理解了其中的含义。真的吗?你有一篇 5000 字的博客是写关于插入随机类型理论概念的吗?毫无疑问的没有。a)为什么有人会关心这些以及b)通过这个高大上的概念能帮我们解决什么问题?我想把你装进麻布袋里,扔进河里,并且砸进一个 里。

  我们在讨论什么?当然,关联类型。

  当我第一次看到 Swift 范型的实现时, 关联类型的用法的出现,让我感到很奇怪。

  在这篇文章,我将通过类型概念和一些实践经验,这几乎都是我用自己的思考尝试解释这些概念(如果我犯了错误,请告诉我)。

范型

  在 Swift 中,如果我想有一个抽象的类型(也就是创建一个范型的 东西 ),在类中的语法是这个样子:

class Wat{ ... }

  类似的,带范型的结构体:

struct WatWat{ ... }

  或者带范型的枚举:

enum GoodDaySir{ ... }

  但如果我想有一个抽象的协议:

protocol WellINever {

typealias T

}

  嗯哼?

基本概念

protocol class struct 以及 enum 不同,它不支持范型类型 参数 。代替支持 抽象类型成员 ;在 Swift 术语中称作 关联类型 。尽管你可以用其它系统完成类似的事情,但这里有一些使用关联类型的好处(以及当前存在的一些缺点)。

  协议中的一个关联类型表示:我不知道具体类型是什么,一些服从我的类、结构体、枚举会帮我实现这个细节

  你会很惊奇:非常棒,但和类型参数有什么不同呢?。一个很好的问题。类型参数强迫每个人知道相关的类型以及需要反复的指明该类型(当你在构建他们的时候,这会让你写很多的类型参数)。他们是公共接口的一部分。这些代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值