热门IT资讯网

Swift2.0(17)泛型技术

发表于:2024-11-24 作者:热门IT资讯网编辑
编辑最后更新 2024年11月24日,泛型技术何为泛型?简单理解:代码具有与类型无关的通用性Objective-C在Xcode7开始,引入了泛型技术的应用Swift支持相对比较完整的泛型技术泛型函数格式: func 函数名<类型>(参数列
  • 泛型技术

何为泛型?

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

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

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


  • 泛型函数

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

如:

func my_swap(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 {
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 {

var value:T?

}

var a = A<Double>()

a.value = 3.14


  • 类型约束

语法:

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

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

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

func isEqualEquatable>(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()
}

}


0