• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >swift > 解析Swift中的泛型支持与使用

解析Swift中的泛型支持与使用

作者:珲少 字体:[增加 减小] 来源:互联网 时间:2017-05-28

珲少 通过本文主要向大家介绍了swift 泛型,gson解析泛型,gson解析带泛型的bean,gson解析response泛型,.net支持泛型类吗等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

一、以泛型为参数的函数

泛型是Swift语言强大的核心,泛型是对类型的抽象,使用泛型开发者可以更加灵活方便的表达代码意图。我们知道,有参函数的参数必须有一个明确的参数类型,有些时候开发者会遇到这样一种情况,编写一个函数用于交换两个变量的值,由于变量有类型之分,实现相同的功能,可能需要重载成多个函数来实现,这大大浪费了开发成本,使用泛型,可以完美的解决这个问题,示例代码如下:

func exchange<T>(inout param1:T,inout param2:T){
  let tmp = param1
  param1 = param2
  param2 = tmp
}
var p1 = "15"
var p2 = "40"
exchange(&p1, param2: &p2)
</div>

上面的方法可以实现对任意相同类型变量的交换,函数参数中使用泛型,需要在函数名后的<>中定义参数占位符,如有多个参数占位符,用逗号隔开即可。

二、泛型在类型中的应用

泛型除了可以作为函数的参数、返回值外,在定义类型时,灵活应用泛型也可以解决很多十分棘手的问题,例如实现一个栈结构的集合类型,示例代码如下:

struct Stack<ItemType> {
  var items:[ItemType] = []
  mutating func push(param:ItemType) {
    self.items.append(param)
  }
  mutating func pop()->ItemType{
    return self.items.removeLast()
  }
}
//整型栈
var obj1 = Stack<Int>()
obj1.push(1)
obj1.pop()
//字符串栈
var obj2 = Stack<String>()
obj2.push("HS")
obj2.pop()
</div>

在对使用了泛型的类型进行扩展时,不需要在使用<>进行泛型的定义,直接使用原定义的泛型占位符即可,示例如下:

extension Stack{
  func getArray() -> [ItemType] {
    return items
  }
}
</div>

有时候,开发者需要对泛型进行一些约束,例如只允许此泛型是继承自某个类或者实现了某个协议,示例代码如下:

class MyClass {
  
}
//只有MyClass的子类可以进行Stack栈的创建
struct Stack<ItemType:MyClass> {
  var items:[ItemType] = []
  mutating func push(param:ItemType) {
    self.items.append(param)
  }
  mutating func pop()->ItemType{
    return self.items.removeLast()
  }
}
</div>

在协议中,可以使用另一种方式来进行泛型编程,使用associatedtype关键字可以进行类型关联,示例如下:

protocol MyProtocol {
  //实现协议时才指定类型
  associatedtype ItemType
  var param:ItemType {get set}
}
class MyClass:MyProtocol {
  //由于Swift可以自动识别类型 这是MyProtocol中的ItemType为Int
  var param: Int = 0
}

</div>

三、泛型与where子句的结合使用

使用where子句可以对泛型进行更加严格约束,使其符合开发者需要的逻辑,示例如下:

//T和C都要遵守整型协议
class MyClassTwo<T,C where T:IntegerType,C:IntegerType> {
  var param1:T
  var param2:C
  init(param1:T,param2:C){
    self.param1=param1
    self.param2=param2
    
  }
}

var obj3 = MyClassTwo(param1: 1, param2: 1)
</div>

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 解析Swift中的泛型支持与使用
  • 初步理解Swift中的泛型

相关文章

  • 2017-05-28Swift操作Quartz 2D进行简单的绘图与坐标变换的教程
  • 2017-05-28Swift语言中的一些访问控制设置详解
  • 2017-05-28Swift中的类class与结构体struct体学习笔记
  • 2017-05-22Swift 数组
  • 2017-05-28Swift与Objective C的简单对比
  • 2017-05-28CentOS安装solr 4.10.3详细教程
  • 2017-05-28解析Swift中的泛型支持与使用
  • 2017-05-28Swift中定义二维数组的方法及遍历方法示例
  • 2017-05-28理解二叉堆数据结构及Swift的堆排序算法实现示例
  • 2017-05-28深入讲解Swift的内存管理

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • struts2实现文件下载功能
    • 详解SimpleDateFormat的线程安全问题与解决方案
    • Swift开发iOS应用(1)列表的实现_PHP教程
    • Swift教程之类的析构详解
    • 浅谈Swift编程中switch与fallthrough语句的使用
    • IOS 实现简单的弹幕功能
    • 深入理解swift变量和函数
    • Swift算法实现逐字翻转字符串的方法示例
    • Swift编程中实现希尔排序算法的代码实例
    • 爬虫技术详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有