DevPrep

Все темы › Объектно-ориентированное программирование (ООП)

Интерфейсы и протоколы

Junior

Суть

Интерфейс (в Swift и Objective-C — протокол) — контракт: набор требований, которые тип обязан выполнить. Тип, принявший протокол, можно использовать везде, где ожидается этот протокол, — это основа полиморфизма без наследования. В Swift протоколы принимают не только классы, но и struct, enum, actor.

Что умеют протоколы в Swift

import Foundation

protocol Identifiable2 {
    associatedtype ID: Hashable
    var id: ID { get }            // property requirement
}

protocol Greeter {
    var name: String { get }
    func greet() -> String
}

extension Greeter {
    // default implementation: conformers may omit it
    func greet() -> String { "Hello, \(name)" }
}

struct User: Greeter, Identifiable2 {
    let id: UUID = UUID()
    let name: String
}

let anyGreeter: any Greeter = User(name: "Ann")   // existential box
func show(_ g: some Greeter) { print(g.greet()) } // generic, static dispatch
show(User(name: "Bob"))      // Hello, Bob
print(anyGreeter.greet())    // Hello, Ann

any vs some

На что смотрит интервьюер

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store