Ответ
Полиморфизм — это принцип ООП, позволяющий объектам с одинаковым интерфейсом (именем метода или свойства) иметь различную реализацию в зависимости от их конкретного типа.
Основные виды полиморфизма в Swift:
-
Ad-hoc полиморфизм (Перегрузка методов / функций): Несколько функций с одним именем, но разными типами параметров.
func process(_ value: Int) { print("Processing Int: (value)") } func process(_ value: String) { print("Processing String: (value)") } -
Полиморфизм подтипов (Наследование и переопределение): Подкласс предоставляет свою реализацию метода, объявленного в суперклассе.
class Vehicle { func makeSound() { print("Some vehicle sound") } } class Car: Vehicle { override func makeSound() { print("Beep beep!") } } let myVehicle: Vehicle = Car() myVehicle.makeSound() // Вывод: "Beep beep!" -
Параметрический полиморфизм (Протоколы / Дженерики):
- Протоколы: Разные типы соответствуют одному протоколу.
protocol Renderable { func draw() } struct Circle: Renderable { func draw() { print("○") } } struct Triangle: Renderable { func draw() { print("△") } } let shapes: [Renderable] = [Circle(), Triangle()] shapes.forEach { $0.draw() } // Вывод: ○ △ - Дженерики: Функции и типы, работающие с любым совместимым типом.
func swapValues<T>(_ a: inout T, _ b: inout T) { (a, b) = (b, a) }
- Протоколы: Разные типы соответствуют одному протоколу.
Преимущества: Уменьшает связанность кода, повышает гибкость и расширяемость, позволяет писать более абстрактные и универсальные алгоритмы.