Swift之泛型类型与泛型参数

Swift之泛型类型与泛型参数,第1张

概述import Foundationfunc swapTwoInts(inout a: Int, inout b: Int){ let temporaryA = a a = b b = temporaryA}func swapTwoStrings(inout a: String, inout b: String) { let temporaryA = a
import Foundationfunc swapTwoInts(inout a: Int,inout b: Int){    let temporaryA = a    a = b    b = temporaryA}func swapTwoStrings(inout a: String,inout b: String) {    let temporaryA = a    a = b    b = temporaryA}func swapTwodoubles(inout a: Double,inout b: Double) {    let temporaryA = a    a = b    b = temporaryA}//泛型代码可以让你写出根据自我需求定义适用于任何类型的,灵活且可重用的函数和类型。它可以让你避免重复代码,用一种清晰和抽象的方式来表达代码的意图//T为占位类型名字,可支持多个类型参数,命名在尖括号中,用逗号分开func swapTwovalues<T>(inout a: T,inout b: T) {    let temporaryA = a    a = b    b = temporaryA}var someInt = 3var anotherInt = 107swapTwovalues(&someInt,b: &anotherInt)var someString = "hello"var anotherString = "world"swapTwovalues(&someString,b: &anotherString)//MARK: - 泛型类型与泛型参数struct IntStack {    var items = [Int]()    mutating func push(item: Int) {        items.append(item)    }    mutating func pop() -> Int {        return items.removeLast()    }}struct Stack<T> {    var items = [T]()    mutating func push(item: T) {        items.append(item)    }    mutating func pop() -> T {        return items.removeLast()    }}var stackOfStrings = Stack<String>()stackOfStrings.push("uno")stackOfStrings.push("dos")stackOfStrings.push("tres")stackOfStrings.push("cuatro")// 现在栈已经有4个string了let fromThetop = stackOfStrings.pop()//MARK: - 类型约束//类型约束指定了一个必须继承自指定类的类型参数,或者遵循一个特定的协议或协议构成/*//第一个类型参数T,有一个需要T必须是SomeClass子类的类型约束;第二个类型参数U,有一个需要U必须遵循SomeProtocol协议的类型约束func someFunction<T: SomeClass,U: SomeProtocol>(someT: T,someU: U) {    // function body goes here}*/func findStringIndex(array: [String],valuetoFind: String) -> Int? {    for (index,value) in array.enumerate() {        if value == valuetoFind {            return index        }    }    return nil}let strings = ["cat","dog","llama","parakeet","terrAPIn"]if let foundindex = findStringIndex(strings,valuetoFind: "llama") {    print("The index of llama is \(foundindex)")}// 输出 "The index of llama is 2"//Swift 标准库中定义了一个Equatable协议,该协议要求任何遵循的类型实现等式符(==)和不等符(!=)对任何两个该类型进行比较。所有的 Swift 标准类型自动支持Equatable协议。func findindex<T: Equatable>(array: [T],valuetoFind: T) -> Int? {    for (index,value) in array.enumerate() {        if value == valuetoFind {   //不是所有的 Swift 中的类型都可以用等式符(==)进行比较            return index        }    }    return nil}let doubleIndex = findindex([3.14159,0.1,0.25],valuetoFind: 9.3)// doubleIndex is an optional Int with no value,because 9.3 is not in the arraylet stringIndex = findindex(["Mike","Malcolm","Andrea"],valuetoFind: "Andrea")// stringIndex is an optional Int containing a value of 2
总结

以上是内存溢出为你收集整理的Swift之泛型类型与泛型参数全部内容,希望文章能够帮你解决Swift之泛型类型与泛型参数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1086609.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存