Есть ли способ создать пользовательский протокол в swift и заставить компилятор автоматически синтезировать соответствие , когда все свойства соответствуют пользовательскому протоколу, объявив некоторые правила о том, как объединитьсвойства?
Прямо сейчас стандартные протоколы Codable
, Equatable
и Hashable
используют это поведение, но я не уверен, можем ли мы объявить наши собственные протоколы так, как они ведут себя.
Игрушечный пример:
Я хотел бы проиллюстрировать простым примером, который я пытаюсь реализовать.Я создал протокол с именем Interpolatable
protocol Interpolatable {
func interpolate(to endValue: Self, at ratio: CGFloat) -> Self
}
. Я хотел бы объявить структуру с именем Keyframe: Interpolatable
, хранящую только свойства, соответствующие протоколу Interpolatable
.
struct Keyframe: Interpolatable {
let customValue1: CustomValueType1 //conforms to Interpolatable
let customValue2: CustomValueType2 //conforms to Interpolatable
}
Теперь я хотел бы иметь возможность где-нибудь еще объявить универсальный способ сообщить компилятору, как заставить подобные типы реализовывать необходимую функцию для соответствия протоколу Interpolatable
.
Возможно ли это?Это, конечно, чувствует себя очень Швифти .