Git Hub
коротко
1 заметка с тегом

Generic

Протоколы и Универсальные типы в swift

8 февраля 2017, 16:29

Пример:
Создаём протокол Alfa, c методами, которые реализуются через generics в дальнейшем

protocol Alfa {
    associatedtype Item
    func printItem(from item: Item)
    func make() -> Item
}

Пишем реализацию класса Betta, который поддерживает протокол Alfa

protocol Initalizable {
    init()
}

class Betta<Item: Initalizable>: Alfa {
    
    func printItem(from item: Item) {
        
        print("\(item)")
    }
    
    func make() -> Item {
        return Item()
    }
   
}
class Window: Initalizable {
    required init() {
        
    }
    
    var isOpened = false
    convenience init(_ opened: Bool) {
        self.init()
        isOpened = opened
    }
}

class CellWin: Initalizable {
    var name: String = ""
    required init() {
        
    }
}

Само использование и конфигурация класса Betta совершенно различными классами, но с общими протоколами

let item = Betta<CellWin>()
item.printItem(from: CellWin() )
        
let factory = Betta<Window>()
factory.printItem(from: Window(true))
        
let window = factory.make()
print("\(window)")
Generic   Protocol   Swift