Назад к вопросам
JuniorТеорияЧасто
Что выведет программа?
protocol Greeter {
func greet() -> String
}
extension Greeter {
func greet() -> String { "Hi" }
}
struct Robot: Greeter {}
struct Cat: Greeter {
func greet() -> String { "Meow" }
}
print(Robot().greet(), Cat().greet())Hi Meow
- Ждать
Hi Hi, считая, что побеждает метод из расширения протокола. Метод самого типа заменяет реализацию по умолчанию, иCatотвечаетMeow. - Ждать ошибки компиляции, потому что у
Robotнет своегоgreet(). Требование выполняет реализация по умолчанию из расширения протокола.
- Что напечатает программа, если убрать
greet()из протокола, оставить в расширении и вCatи вызвать через[any Greeter]? - Как
Catмог бы использовать стандартное приветствие внутри своегоgreet()?