Swift—泛型(上)
1.泛型
2.泛型函数
{
//函数体
}
func copyArray <T> (src : [T]) -> [T] {
var arr : [T] = []
for element in src
{
arr.append(element)
}
return arr;
}
print(copyArray([1, 2, 3, 4])) //此时T的类型代表Int
//输出 [1, 2, 3, 4]
print(copyArray(["g", "h", "k"])) //此时T的类型代表String
//输出 ["g", "h", "k"]
定义多个类型参数,根据不同的运算返回不同元素类型。
func projection <SrcType, DescType>(src:[SrcType], fn:(SrcType) -> DescType) -> [DescType] {
var result = [DescType]()
for element in src {
result.append(fn(element))
}
return result
}
var books = ["AB", "BCDD", "CDE"]
//计算字符串的长度
var fn :(String)->Int = {$0.characters.count}
var proj = projection(books, fn: fn)
print(proj)
//输出[2, 4, 3]
//字符串拼接
var fn1 :(String)->String = {"《" + $0 + "》"}
var proj1 = projection(books, fn: fn1)
print(proj1)
//输出 ["《AB》", "《BCDD》", "《CDE》"]
3.泛型类型
泛型不仅可以在函数中使用,也可以在Swift的类型(枚举、结构体、类)中使用。(Swift内置支持的Array、Dictionary就是典型的泛型结构体)
结构体增加泛型参数
struct Rect<T> {
var x : T
var y : T
var weight : T
var height : T
}
var rect1 : Rect<Int>= Rect.init(x: 1, y: 1, weight: 14, height: 28)
var rect2 : Rect<Double>= Rect.init(x: 1.0, y: 2.0, weight: 14.5, height: 28.2)
print(rect1)
//输出 Rect<Int>(x: 1, y: 1, weight: 14, height: 28)
print(rect2)
//输出 Rect<Double>(x: 1.0, y: 2.0, weight: 14.5, height: 28.2)
枚举增加泛型参数,是它们适应枚举中的关联值
enum Season<T> {
case Winter(temp:T)
case Summer
case Spring
case Autumn
}
var w : Season<Int>= Season.Winter(temp: 0)
var w1 : Season<Double> = Season.Winter(temp: -0.2)
类增加泛型参数
class Apple <T> {
var info : T
init(info : T) {
self.info = info
}
}
var a = Apple<String>.init(info: "11")
print(a.info)
//输出 11
var a1 = Apple<Double>.init(info: 1.23)
print(a1.info)
//输出 1.23
Swift—泛型(上)的更多相关文章
- Swift泛型协议的N种用法
They said "you should learn a new language every year," so I learned Swift. Now I learn ...
- Swift泛型和泛型函数
泛型(generic)可以使我们在程序代码中定义一些可变的部分,在运行的时候指定.使用泛型可以最大限度地重用代码.保护类型的安全以及提高性能.在Swift集合类中,已经采用了泛型.一.一个问题的思考怎 ...
- 学习Swift -- 泛型
泛型 泛型代码可以让你写出根据自我需求定义.适用于任何类型的,灵活且可重用的函数和类型.它的可以让你避免重复的代码,用一种清晰和抽象的方式来表达代码的意图. 泛型所解决的问题 先来看一个交换两个int ...
- Swift 泛型參数
原文:http://www.cocoachina.com/newbie/basic/2014/0612/8802.html 本页内容包含:泛型形參语句和泛型实參语句 本节涉及泛型类型.泛型函数以及泛型 ...
- 系统整理 精讲 swift 泛型
泛型是一种非常领会的语法,让我很是膜拜! 真是让人又爱又恨,学不懂的时候很抓狂 允许程序在函数,枚举,结构体,类中定义类型形参(类型可以动态改变) 每次使用可以传入不同类型的形参! Array< ...
- Java中的泛型 (上) - 基本概念和原理
本节我们主要来介绍泛型的基本概念和原理 后续章节我们会介绍各种容器类,容器类可以说是日常程序开发中天天用到的,没有容器类,难以想象能开发什么真正有用的程序.而容器类是基于泛型的,不理解泛型,我们就难以 ...
- 【Java心得总结三】Java泛型上——初识泛型
一.函数参数与泛型比较 泛型(generics),从字面的意思理解就是泛化的类型,即参数化类型.泛型的作用是什么,这里与函数参数做一个比较: 无参数的函数: public int[] newIntAr ...
- Swift泛型Protocol对比C#泛型Interface
本篇纯属抬杠之作,之前我们提到了Swift的泛型Protocol使用associatedtype关键字,而不是使用<Type>语法的泛型参数.这其中有什么好处呢? 我就这个问题搜索了一些回 ...
- swift文件上传及表单提交
var carData:NSMutableDictionary = NSMutableDictionary(); var request:NSMutableURLRequest = NSMutable ...
随机推荐
- codeforces 501 C,D,E
C题意: 给定n个点(标号0~n-1)的度数(就是与其邻接的点的个数)和所有与它邻接的点标号的异或和,求满足这些条件的树的边应该是怎么连的,将边输出出来 这里可以理解成拓扑排序的方式考虑,当i度数为1 ...
- hdu, KMP algorithm, linear string search algorithm, a nice reference provided 分类: hdoj 2015-07-18 13:40 144人阅读 评论(0) 收藏
reference: Rabin-Karp and Knuth-Morris-Pratt Algorithms By TheLlama– TopCoder Member https://www.top ...
- ios 真机调试 could not find Developer Disk Image
同事不小心把iphone测试机升级到了最新系统, 真机调试以前的项目时候不能运行, 提示could not find Developer Disk Image. 原因:缺少最新系统9.3的镜像 解决办 ...
- java多线程之 基本概念
一.线程的五种状态 1. 新建状态(New) : 线程对象被创建后,就进入了新建状态.例如,Thread thread = new Thread().2. 就绪状态(Runnable) ...
- angularjs ng-click
在angularjs的controller中一段代码,展示如下: var sortList = new SortList(); sortList.setSorts([$scope.year_inves ...
- 如何使用.NET开发全版本支持的Outlook插件产品(一)——准备工作
这半年一直在做Outlook的插件,因为不会VC++,所以想找一款基于.NET,用C#开发Outlook插件的技术方案.没想到,光技术选型这件事,就用各种技术手段验证了将近一个月,还花费了大量的精力做 ...
- android 代码优化
http://android.tgbus.com/Android/androidnews/200812/172247.shtml http://blog.163.com/jzq_520/blog/st ...
- VS2012+EF6+MYSQL配置
安装以下三个插件: 1. EFTools6.1.0ForVS2012.msi 2. mysql-connector-net-6.8.3.msi 3. Mysql for Visual Studio 1 ...
- mvc导出excel 之 新
前段时间做的mvc导出excel 老大说要进行优化,我原来导出是用npoi插件进行导出,格式是将数据放入到datatable中,然后进行导出. 说要优化的时候就想着将datatable数据导出格式改为 ...
- .net core 学习笔记(1)-分页控件的使用
最近有个小项目,用.net core开发练练手,碰到的第一个问题就是分页控件的问题,自己写太费时间,上网查了下,发现有人已经封装好了的,就拿过来用了,分页控件github:https://github ...