Swift学习笔记

Swift - 泛型

2022-03-02  本文已影响0人  aven_kang
var n1 = 10
var n2 = 20

func swapValues(_ a:inout Int,_ b: inout Int) {
    
    (a,b) = (b,a)
    
}
class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        swapValues(&n1, &n2)
       
    }
}

在上面的函数中,参数的作用是交换两个值,参数类型也是固定的Int类型
如果我们需要交换两个Double,或者字符串,或者别的,是不是就会出现很多的swapValues函数,那么有没有一种解决方案,一个函数,多种用途
那就是泛型的操作

func swapValues<T>(_ a:inout T,_ b: inout T) {
    
    (a,b) = (b,a)
    
}

那么此时的T,是可以代替各种类型的值
在传递第一个参数的时候,参数的类型就已经传递给了<T>,那么就决定了后面参数的类型是什么了。

示例

class Stack {
    
    var elements = [Int]()
    func push(_ element: Int) {
        elements.append(element)
    }
    
    func pop() -> Int {
        return elements.removeLast()
    }
    
    func top() -> Int {
        
        elements.last!
        
    }
    
}

上述代码中,做了一个简易的入栈出栈功能,但是功能上,是指定的是Int类型,如果改成泛型怎么做呢


class Stack<E> {
    
    var elements = [E]()
    func push(_ element: E) {
        elements.append(element)
    }
    
    func pop() -> E {
        return elements.removeLast()
    }
    
    func top() -> E {
        
        elements.last!
        
    }
    
}

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
       var stc = Stack<Int>()
       
    }
}

关联类型

关联类型的作用:给协议中用到的类型定义个占位名称
协议中可以拥有多个关联类型
protocol Stackable {
    
    associatedtype Element
    // associatedtype Element2 可以拥有多个关联类型
    mutating func push(_ element:Element)
    mutating func pop() -> Element
    func top() -> Element
    func size() -> Int
    
}
class StringStack : Stackable {
    
    typealias Element = String
    var elemets = [String]()
    func push(_ element: String) {
        
    }
    func pop() -> String {
        
    }
    func top() -> String {
        
    }
    func size() -> Int {
        
    }
    
}
class stack<E> : Stackable {
    
    
    typealias Element = E
    var elements = [E]()
    
    func push(_ element: E) {
        
    }
    func pop() -> E {
        
    }
    
    func top() -> E {
        
    }
    func size() -> Int {
       return 0
    }
    
}
截屏2022-02-26 下午2.08.44.png

类型约束

截屏2022-02-26 下午3.18.13.png
上一篇下一篇

猜你喜欢

热点阅读