Swift泛型

泛型是为Swift编程灵活性的一种语法,在函数、枚举、结构体、类中都得到充分的应用,它的引入可以起到占位符的作用,当类型暂时不确定的,只有等到调用函数时才能确定具体类型的时候可以引入泛型。

泛型函数

定义

fun 函数名<T,S>(形参列表)->返回值类型
{
     //函数体...
}

例子:

 func copyArray<T>(src:[T],inout dest:[T]) {
    for element in src
    {
     dest.append(element)
    }

     var arr=[1,2]
    copyArray([3,4], dest: &arr)
    print(arr)

在这里我们运用泛型为函数提供了一个T类型的占位符,这个占位符就可以在函数的实际调用中被替换成真是类型。

结构体泛型

 struct WXRect<T>
{
    var x:T
    var y:T
    var Add:(T,T)
        {
        return (self.x,self.y)
        }
 }
     let rect=WXRect<Double>(x: 20.0, y: 20.0)
    let (30.0,20.0)=rect.Add
    print("(\(x),\(y))")

类中泛型

    class Swift<T> {
    var info:T
    init(info:T)
   {
    self.info=info
    }
}

    var swift=Swift<String>(info:"Swift泛型")
    print("\(swift.info)真强大")

类型约束

上面的例子中,泛型形参没有什么约束,我们可以对泛型传入任何值,但在实际中,或许有时候我们需要为泛型增加某些特定的约束。

定义类型参数时增加一个限制,约束这个类型参数必须继承自特定的类,或遵守一个特定的协议或合成协议,这就叫做类型约束。

语法格式:

<类型形参1:父类,类型形参2:协议,类型形参3:protocol<协议1,协议2>,..>

Where语句

where语句要求一个关联类型遵循一个特定的协议,或那个特定的类型参数和关联类型可以是相同的

<类型形参:父类型,类型形参2:协议,…where 条件>

时间: 2024-10-31 22:44:43

Swift泛型的相关文章

Swift泛型和泛型函数

泛型(generic)可以使我们在程序代码中定义一些可变的部分,在运行的时候指定.使用泛型可以最大限度地重用代码.保护类型的安全以及提高性能.在Swift集合类中,已经采用了泛型.一.一个问题的思考怎样定义一个函数来判断两个参数是否相等呢?如果参数是Int类型,则函数定义如下:func isEqualsInt(a:Int, b:Int) -> Bool {    return (a == b)}这个函数参数列表是两个Int类型,它只能比较两个Int类型参数是否相等.如果我们想比较两个Double

Swift中文教程(七)协议、扩展和泛型

Protocols and Extensions 协议(接口)和扩展 Swift使用关键字protocol声明一个协议(接口): 类(classes),枚举(enumerations)和结构(structs)都可采用协议(protocol): class SimpleClass: ExampleProtocol { var simpleDescription: String = "A very simple class." var anotherProperty: Int = 6910

Swift编程中的泛型解析_C 语言

泛型代码可以让你写出根据自我需求定义.适用于任何类型的,灵活且可重用的函数和类型.它可以让你避免重复的代码,用一种清晰和抽象的方式来表达代码的意图.   泛型是 Swift 强大特征中的其中一个,许多 Swift 标准库是通过泛型代码构建出来的.事实上,泛型的使用贯穿了整本语言手册,只是你没有发现而已.例如,Swift 的数组和字典类型都是泛型集.你可以创建一个Int数组,也可创建一个String数组,或者甚至于可以是任何其他 Swift 的类型数据数组.同样的,你也可以创建存储任何指定类型的字

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

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

[译]Swift 中的通用数据源

本文讲的是[译]Swift 中的通用数据源, 原文地址:Generic Data Sources in Swift 原文作者:Andrea Prearo 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:Swants 校对者:iOSleep Swift 中的通用数据源 在我开发的绝大多数 iOS app 中, tableView 和 collectionView 绝对是最常用的 UI 组件.鉴于设置一个 tableView 或 collectionVie

窥探Swift之使用Web浏览器编译Swift代码以及Swift中的泛型

有的小伙伴会问:博主,没有Mac怎么学Swift语言呢,我想学Swift,但前提得买个Mac.非也,非也.如果你想了解或者初步学习Swift语言的话,你可以登录这个网站:http://swiftstub.com/ .该网站可以在线运行出代码结果,也可以说这是一个在线的Playground.你可以实时观察你代码的运行结果.如果你没有Mac笔记本,那么你只需打开你的浏览器,然后输入上述网址,就可以搞搞Swift这门语言了,灰常好用的呢.下方的截图就是该网址打开的截图.   上面如果算是工具性的网站的

swift 类中使用泛型报错

问题描述 swift 类中使用泛型报错 2C 小弟刚刚学swift些了一段代码但是运行时报错感觉很迷惑,希望有人可以解惑什么地方错了: class Pushpop<T> { var items = [T]() func push(item:T) { items.append(item) } func pop() { items.removeLast() }}var stack = Pushpop<String>()stack.push(""things"

Swift 2 中为实存类型和泛型搭桥牵线

本文讲的是Swift 2 中为实存类型和泛型搭桥牵线, 我们又回到了讨论泛型的另一个章节,来讨论泛型,有其他类型的协议和在 Swift 2 中的其他类型的系统限制.这次我们会深入讨论一个有趣的变通方法,它是那个声名狼藉的 jckarter 教会我的.我们也会讨论在未来的 Swift 版本中,这个变通方法通过增强型的实存类型就变得不必要了. Swift 中的实存类型 一般而言,实存类型允许我们去使用类型的需求来定义类型变量.我们可以在整个项目中使用这些类型变量,它可以不需要被知道背后是具体的哪个类

《Swift开发实战》——第2章,第2.8节泛型

2.8 泛型在Swift语言中,在尖括号里写一个名字来创建一个泛型函数或者类型.例如,如下所示的演示代码. func repeat<ItemType>(item: ItemType, times: Int) -> ItemType[] { var result = ItemType[]() for i in 0..times { result += item } return result } repeat("knock", 4) 你也可以创建泛型类.枚举和结构体.