Swift-泛型

2020-12-15  本文已影响0人  lieon

泛型

class Stack<E> {
    var elements = [E]()
    
    func push(_ element: E) {
        elements.append(element)
    }
    
    func pop() -> E {
        return elements.removeLast()
    }
    
    func top() -> E {
        return elements.last!
    }
    
    func size() -> Int {
        return elements.count
    }
}
protocol Stackable {
    associatedtype Element
    mutating func push(_ element: Element)
    mutating func pop() -> Element
    func top() -> Element
    func size() -> Int
}

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

protocol Runable { }
class Person { }

func swapValue<T: Person & Runable>(_ a: inout T, _ b: inout T) {
    (a, b) = (b, a)
}

func get<T: Runable>(_ type: Int) -> T {
    if type == 0 {
        return Person() as! T
    }
    return Car() as? T
}
}

不透明类型(Opaque Type)

func get(_ type: Int) -> some Runable {
    return Car()
}

// ❌
func get(_ type: Int) -> some Runable {
    if type == 0 {
        return Person()
    }
    return Car()
}
上一篇 下一篇

猜你喜欢

热点阅读