Привет всем.
Начал изучать Свифт и соответственно сталкиваться с непонятными вещами.
Вот например AnimatablePair.
Посмотрел видео по этой ссылке https://developer.apple.com/videos/play/wwdc2019/237/ и вроде бы все более менее понятно, но вот решил поковыряться в исходниках, которые были представлены в этом видео, и то, как был реализован протокол Animatable меня несколько запутало.
extension Ring.Wedge: Animatable {
typealias AnimatableData = AnimatablePair<
AnimatablePair<Double, Double>, AnimatablePair<Double, Double>>
var animatableData: AnimatableData {
get {
.init(.init(start, end), .init(depth, hue))
}
set {
start = newValue.first.first
end = newValue.first.second
depth = newValue.second.first
hue = newValue.second.second
}
}
}
Параметры start, end здесь это углы в градусах. depth, hue - радиус и цвет.
Почему алиас типа какой то вложенный. Порылся в документации и не нашел подобного описания? Получается как бы в пару поместили еще две пары.
Почему в геттере присутствует init? Мне пока попадались примеры где в геттере была указана только анимируемая переменная или структура.
Если нужно анимировать большее количество параметров, можно ли тогда еще одну AnimatablePair поместить в AnimatablePair?
Большая просьба помочь в этом разобраться))