Swift泛型(Generics)
来源:互联网 发布:小米笔记本安装linux 编辑:程序博客网 时间:2024/05/18 03:09
// 泛型,交换两个数的值,Int, String等。inout关键字表示引用参数。func swapTwoValues<T>(inout a: T, inout b: T) { let temp = a a = b b = temp}var someInt = 10var anotherInt = 20swapTwoValues(&someInt, &anotherInt)// "someInt = 20, anotherInt = 10"println("someInt = \(someInt), anotherInt = \(anotherInt)")// 泛型Stackstruct Stack<T> { var items = [T]() // mutating关键字表示该方法可以改变struct的成员,这里的items数组需要改变 mutating func push(item: T) { items.append(item) } mutating func pop() -> T { return items.removeLast() }}// 指定泛型参数为Stringvar stackOfStrings = Stack<String>()stackOfStrings.push("apple")stackOfStrings.push("orange")stackOfStrings // ["apple", "orange"]stackOfStrings.pop() // ["orange"]/**类型约束语法:param: someT 该类型要继承SomeClass类:param: someU 该类型要遵守SomeProtocol协议*//*func someFunction<T: SomeClass, U: SomeProtocol>(someT: T, someU: U) { }*/// 找一个相等数值的泛型函数, 下面的写法会报错,因为泛型T可能是结构体和类等,它们不一定支持==,!=操作符。/*func findIndex<T>(array: [T], valueToFind: T) -> Int? { for (index, value) in enumerate(array) { if (value == valueToFind) { return index } } return nil;}*/// 正确写法,Swift中有一个Equatable协议,遵循该协议的类实现 ==, !=操作符,所有Swift标准类型都支持Equatable协议。func findIndex<T: Equatable>(array: [T], valueToFind: T) -> Int? { for (index, value) in enumerate(array) { if value == valueToFind { return index } } return nil}if let index = findIndex([0, 1, 2, 3, 4, 5], 3) { println("index = \(index)") index} else { println("index = nil")}// 关联类型行为protocol Container { typealias ItemType mutating func append(item: ItemType) var count: Int { get } subscript(i: Int) -> ItemType { get }}struct IntStack: Container { var items = [Int]() mutating func push(item: Int) { items.append(item) } mutating func pop() -> Int{ return items.removeLast() } // 这句写不写都可以,Swift可以自动判别该类型 typealias ItemType = Int mutating func append(item: Int) { self.push(item) } var count: Int { return items.count } subscript(i: Int) -> Int { return items[i] }}// 泛型版本struct StackG<T>: Container { var items = [T]() mutating func push(item: T) { items.append(item) } mutating func pop() -> T { return items.removeLast() } // typealias ItemType = T mutating func append(item: T) { self.push(item) } var count: Int { return items.count } subscript(i: Int) -> T { return items[i] }}// where语句/**1.C1 C2要遵循Container协议2.C1.ItemType == C2.ItemType,它们要相同3.C1要遵循Equatable协议*/func allItemsMatch< C1: Container, C2: Container where C1.ItemType == C2.ItemType, C1.ItemType: Equatable> (someContainer: C1, anotherContainer: C2) -> Bool { // 检查两个Container的元素个数是否相同 if someContainer.count != anotherContainer.count { return false } // 检查两个Container相应位置的元素彼此是否相等 for i in 0..<someContainer.count { if someContainer[i] != anotherContainer[i] { return false } } // 如果所有元素检查都相同则返回true return true }
0 0
- Swift泛型(Generics)
- swift generics 泛型
- Swift 泛型(Generics)
- 第七节 Swift 泛型(Generics)
- swift—5 Generics泛型
- 对照Java学习Swift--泛型(Generics)
- Swift Generics Tutorial
- Swift学习笔记22——泛型(Generics)
- 泛型 Generics
- 泛型generics
- 泛型Generics
- 泛型(Generics)
- Swift语法基础:7 - Swift的Generics
- Swift之泛型(Generics)
- 泛型(Generics)
- 泛型(Generics)大全
- C# 2.0 - 泛型(Generics)
- Java泛型(Generics)
- 不用‘+’实现加法运算
- 705 - Slash Maze
- java多线程总结:
- 字符全排列、全组合以及相关问题
- NYOJ 题目757 期末考试(贪心)
- Swift泛型(Generics)
- Android动画浅析
- 机器学习中的学习方式-Types of learning
- 【axure手机原型】沟通篇之产品经理讨厌吗?
- 【axure手机原型】沟通篇之产品经理讨厌吗?
- (通用)寄存器
- Service基础
- activity之栈管理
- 互联网之子--亚伦.斯沃茨