Sobes.tech
Back to questions
Junior — Middle
69

Можно ли определить функцию внутри определения протокола?

Answer from AI

sobes.tech AI

В Swift внутри определения протокола нельзя реализовывать функции — протоколы описывают только требования к методам, свойствам и другим членам, которые должны быть реализованы в классах, структурах или перечислениях, соответствующих протоколу.

То есть в протоколе можно объявить сигнатуру функции, но не тело:

protocol MyProtocol {
    func doSomething()
}

Реализация функции doSomething() должна быть предоставлена в типе, который наследует этот протокол.

Однако с появлением расширений протоколов (protocol extensions) можно добавить реализацию методов по умолчанию, которая будет доступна всем типам, соответствующим протоколу:

extension MyProtocol {
    func doSomething() {
        print("Реализация по умолчанию")
    }
}

Таким образом, непосредственно внутри протокола функцию определить нельзя, но можно добавить реализацию в расширении протокола.