Swift2.0(17)泛型技术

  • 泛型技术

何为泛型?

简单理解:代码具有与类型无关的通用性

Objective-C在Xcode7开始,引入了泛型技术的应用

Swift支持相对比较完整的泛型技术

  • 泛型函数

格式: func 函数名<类型>(参数列表)->返回类型 {}

如:

func my_swap<T>(inout value1 value1:T, inout value2:T) {
        var tmp:T
        tmp = value1
        value1 = value2
        value2 = tmp
    }
    var a1 = 10, a2 = 20
    my_swap(value1: &a1, value2: &a2)
    print("a1=\(a1) a2=\(a2)") //a1=20 a2=10
    var b1 = 3.14, b2 = 1.23
    my_swap(value1: &b1, value2: &b2) //b1=1.23 b2=3.14

print("b1=\(b1) b2=\(b2)")

  • 通用类型

实现类似Array、Dictionary可以存储各种数据类型

如实现一个栈结构体:

struct Stack<T> {
        private var items = [T]()
        var count:Int {
            get {
                return items.count
            }
        }
        mutating func push(value:T) {
            items.append(value)
        }
        mutating func pop()->T? {
            if items.count == 0 {
                return nil
            }
            else {
                return items.removeLast()
            }
        }

}

var s:Stack<Int> = Stack<Int>()
    s.push(10)
    s.push(20)
    s.push(30)
    print(s.pop())
    print(s.pop())

print(s.pop())

再如一个简单的类类型

class A<T> {

var value:T?

}

var a = A<Double>()

a.value = 3.14

  • 类型约束

语法:<T:协议1,协议2,...>

表示T通用类型必须是遵循了协议1、协议2的类型

如:Swift标准库的自带协议Equatable定义了==运算符重载函数的接口

并且大部分Swift的基本数据类型都遵循并实现了该协议

func isEqual<T:Equatable>(left:T, right:T)->Bool {
        return left == right
    }

print(isEqual(3.14, right: 3.15))

  • 关联类型

关联类型的含义:在协议中使用泛型技术

如:

protocol AProtocol {
        typealias itemType  //占位类型
        func push(item:itemType)
        func pop()->itemType?
    }
    class A:AProtocol {
        var items = [Int]()

typealias itemType = Int //******

func push(item: itemType) {
            items.append(item)
        }
        func pop()->itemType? {
            if items.count == 0 {
                return nil
            }
            else {
                return items.removeLast()
            }

}

时间: 2024-12-28 15:11:53

Swift2.0(17)泛型技术的相关文章

关东升的《Swift2.0》(暂定名)即将出版

大家好: 苹果2015WWDC大会发布了Swift2.0,它较之前的版本Swift1.x有很大的变化,所以我将在11月左右出版,<Swift2.0>(暂定名) ,<Swift2.0>将在<Swift开发指南>第1版的基础上添加Swift2.0的内容,同时摒弃第1版的一些不合理的内容,使得本书更加适合Swift开发者.我将连续发一些Swift2.0的学习笔记,有兴趣者,可以看一下. 附<Swift2.0>(暂定名)此书目录: 1 本书约定 2 第一个Swift

泛型技术

泛型技术的介绍 这个技术是JDK5中提供的. 针对集合这类容器而言,它中可以存放任意的对象,当任何的对象存放到集合中之后,都被提升成Object类型,当我们从集合中遍历出每个对象的时候,拿到的都是Object类型,这时如果我们想使用对象自身的功能时,就需要向下转型.只要使用向下转型都可能发生ClassCastException异常. 在给集合中存放对象的时候,以Object形式存放进去的.在取出时也是Object类型,当我们在使用对象的特有方法时,进行向下转型,结果发生了异常.造成这个异常的原因

Swift2.0初见笔记

Swift2.0 1.简单值 1.使用let来声明常量,常量无法改变(相当于const);使用var来声明变量. var myVariable = 42 myVariable = 50 let myConstant = 42 2.常量或者变量的类型必须和你赋给它们的值一样.然而,你不用明确地声明类型,声明的同时赋值的话,编译器会自动推断类型 let implicitInteger = 70 let implicitDouble = 70.0 let explicitDouble: Double

Swift基础知识入门(基于Swift2.0)

//: Playground - noun: a place where people can play import UIKit // Swift中不需要设置main函数入口,编译器会在全局函数中自动设置程序的入口,在书写Swift代码时,可以不使用";"作为语句的结束标志 var str = "Hello, playground" var str1 = "Hello, LiLe" print("Hello World!")

Swift2.0语言教程之下标脚本

Swift2.0语言教程之下标脚本 下标脚本 下标脚本是訪问对象.集合或者序列的高速方式.开发人员不须要调用实例特定的赋值和訪问方法,就能够直接訪问所须要的数值. 比如在数组中,能够直接使用下标去訪问或者改动数组中的某一个元素. 代码例如以下: import Foundation var array=["One","Two","Three","Four","Five"] print("訪问元素:\

Swift2.0语言教程之函数嵌套调用形式

Swift2.0语言教程之函数嵌套调用形式 Swift2.0语言函数嵌套调用形式 在Swift中,在函数中还可以调用函数,从而形成嵌套调用.嵌套调用的形式往往有两种:一种是在一个函数中调用其他函数:另一种是在一个函数中调用自身函数.以下将对这两种调用进行详细讲解. Swift2.0语言嵌套调用基本形式 嵌套调用是指在函数中可以调用其他函数.调用方式如图7.4所示.   图7.4  函数嵌套的形式 [示例7-25]以下将使用函数的嵌套调用实现对s = 22! + 32!的计算.代码如下: impo

Swift2.0语言教程之类的方法

Swift2.0语言教程之类的方法 Swift2.0语言的方法 方法其实就是函数,只不过它被定义在了类中.在Swift中,根据被使用的方式不同,方法分为了实例方法和类型方法两种.这两种方法的定义也和Objective-C是不同的.本节依次讲解这两种方法. Swift2.0语言的实例方法 实例方法被定义在类中,但是由类的实例调用.所以,这类方法被称为实例方法.实例方法和函数一样,分为了不带参数和带参数两种.以下依次讲解这两种方法的使用. 1.不带参数的实例方法 不带参数的实例方法定义和函数的是一样

Swift2.0语言教程之函数的返回值与函数类型

Swift2.0语言教程之函数的返回值与函数类型 Swift2.0中函数的返回值 根据是否具有返回值,函数可以分为无返回值函数和有返回值函数.以下将会对这两种函数类型进行讲解. Swift2.0中具有一个返回值的函数 开发者希望在函数中返回某一数据类型的值,必须要在函数声明定义时为函数设定一个返回的数据类型,并使用return语句进行返回.其中,return语句的一般表示形式如下: return 表达式 其中,表达式可以是符合Swift标准的任意表达式.而具有返回值的函数声明定义形式如下: fu

总结swi1.2适配swift2.0遇到的改变

swift1.2适配swift2.0 以下列举的是我在项目中遇到的需要修改的,基本常见的问题就没有罗列了. 1.find函数变成了为indexOf 2.sort变成了sortInPlace 3.sorted变成了sort 4.enumerate(self.tableView.visibleCells)修改为self.tableView.visibleCells.enumerate() 5.Printable 变成了CustomStringConvertible 6.DebugPrintable