swift 当协议遇见了泛型
由于泛型比较简单,并没有单独拿出来介绍!我们在定义函数的时候,有时候只是由于参数或者返回值类型不同,而具体的实现过程是一模一样的,这个时候我们就可以定义泛型函数而使可以传入不同的参数类型;
Swift的泛型有点奇怪,针对Class和Function,都是通过<Type>来定义。而当我们需要给协议实现一个泛型的时候,需要使用associatedtype关键字来定义泛型:这里需要注意,泛型协议并不能像普通协议那样作为一个类型使用,这是因为 GenericProtocol 表示一组类型,并不是一个单一类型。比如你有一个关于 GenericProtocol 的随机数组,并不能确定每个元素的 magic() 方法返回的类型到底是什么,因为数组中每个元素可能都是不同的。
protocol GenericProtocol {
associatedtype AbstractType
func magic() -> AbstractType
}
class Animal : GenericProtocol {
typealias AbstractType = Void
// void 可以改为string int 等类型。 当然magic的参数也可以定义泛型参数来使用 这里没有任何参数
func magic() -> Void {
print("xieyi hixing" )
}
}
究竟为什么泛型协议不像普通的class struct使用<T>来修饰,以及泛型协议的具体应用可以参见这位大神的文章。
http://www.jianshu.com/p/ef4a9b56f951
swift 当协议遇见了泛型的更多相关文章
- swift:入门知识之泛型
在尖括号里写一个名字来创建一个泛型函数或者类型 例如<T>.<Type> 可以创建泛型类.枚举和结构体 在类型后使用where来指定一个需求列表.例如,要限定实现一个协议的类型 ...
- Swift中文教程(七)--协议,扩展和泛型
Protocols and Extensions 协议(接口)和扩展 Swift使用关键字protocol声明一个协议(接口): 类(classes),枚举(enumerations)和结构(stru ...
- Swift学习——A Swift Tour 协议和扩展
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhenyu5211314/article/details/28854395 Protocols an ...
- 窥探Swift之协议(Protocol)和委托代理(Delegate)回调的使用
协议与委托代理回调在之前的博客中也是经常提到和用到的在<Objective-C中的委托(代理)模式>和<iOS开发之窥探UICollectionViewController(四) - ...
- Swift利用协议优化NSNotificationCenter
NSNotificationCenter存在的问题 通知没有统一的命名格式 对于通知的命名没有强制的要求,一个项目里可能有多种不同的命名规则.比如: 1 2 3 4 5 6 class Barista ...
- 利用Swift之协议语法实现页面间的传值功能
随着Swift 新开发语言的发布,又随着Xcode6.0.1的正式发布,利用swift编写iOS代码迫在眉睫,笔者在使用Objective-C开发近三年以来,对这种优雅的语法深感赞叹,下面我将对比式的 ...
- swift 用协议实现代理传值功能
1.功能简介 RootViewController中用个lable和一个按钮,点击按钮跳转到模态窗口.在模态窗口中有个TextField和一个按钮,输入文字点击关闭模态按钮后跳转到RootViewCo ...
- iOS oc和swift中协议的使用
创建一个空的工程 在工程中我们新建一个类 继承与NSObject 定义一个协议‘ @protocol UpdateAlertDelegate <NSObject> //这里的红色字体就是我 ...
- swift面向协议编程
https://www.technotification.com/2018/08/protocol-oriented-programming-swift.html https://www.toptal ...
随机推荐
- Linq二 LinqToSql
虽然微软已经停止更新了LinqToSql,但是目前的已完全满足目前的需求. 第一步:添加LinqToSql 第二步:将其关联的Sqlserver数据库 第三步:数据库已变成实体类 第四步:可以对数据库 ...
- 关于重定向urlrewriter.urlmapping
大家都知道web.config 中的 urlMappings怎么用 <system.web> <urlMappings enabled="true"> &l ...
- framework各版本对比
本对比只是粗略的让大家了解到大概有什么变化 .net 1.0 2002年2月.net 2.0 2006年1月.net 3.0 2006年11月 .net 3.5 2007年11月.net 3.5 sp ...
- iOS-UILabel自适应高、宽
UILabel自适应高 UILabel自适应宽
- python3.2 + PyQt4界面开发hello world
需要先安装python3.2 然后安装python3.2对应的PyQt4界面库版本 import sys from PyQt4 import QtGui , QtCore app = QtGui.QA ...
- Android 学习第4课,一些小知识
java语言的注释有如下3种: 1. // 2./* 注释内容 */ 3./** 注释内容 */ 这种叫文档注释,这种注释常被javaDoc文档工具读取作为 JavaDoc文 ...
- mysql source命令超大文件导入方法总结
本文章来给各位朋友介绍利用mysql source命令超大文件导入方法总结,下面收集了两种解决办法,一种是把数据库分文件导出然后再导入,另一种是修改my.ini配置文件,下面我一一给各位朋友介绍. 导 ...
- hiho一下122周 后缀数组三·重复旋律
后缀数组三·重复旋律3 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为长度为 N 的数构成的数列.小Hi ...
- 我的STL之旅 MyList
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> // ...
- 论文笔记之:Co-saliency Detection via A Self-paced Multiple-instance Learning Framework
Co-saliency Detection via A Self-paced Multiple-instance Learning Framework T-PAMI 2016 摘要:Co-sal ...