Sobes.tech
Junior — Middle

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

sobes.tech AI

Отговор от AI

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

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

protocol MyProtocol {
    func doSomething()
}

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

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

extension MyProtocol {
    func doSomething() {
        print("Реализация по подразбиране")
    }
}

По този начин, директно вътре в протокола функцията не може да бъде дефинирана, но може да добавите реализация в разширението на протокола.