Это можно сделать с помощью протоколов и расширений.Вот пример, сделанный с использованием игровых площадок.Вы можете скопировать и вставить этот код в игровую площадку, чтобы возиться с ним, если хотите, обратите внимание, что расширенный протокол обеспечивает реализацию по умолчанию как для классов, так и для структур.
//: Playground - noun: a place where people can play
import UIKit
protocol ClassProtocol {
func classMethod()
}
extension ClassProtocol {
func classMethod() {
print("here i am")
}
}
class Class1: ClassProtocol { }
class Class2: ClassProtocol { }
struct Struct1: ClassProtocol { }
Class1().classMethod()
Class2().classMethod()
Struct1().classMethod()
Вывод:
here i am
here i am
here i am
Что здесь происходит?Протокол определяет, что метод classMethod
требуется в любом объекте или структуре, использующей протокол.Затем расширение обеспечивает реализацию по умолчанию для этого метода.При необходимости вы также можете переопределить эту реализацию по умолчанию.
struct Struct2: ClassProtocol {
func classMethod() {
print("this does something different")
}
}
Struct2().classMethod()
Вывод:
this does something different