AnimatablePair и протокол Animatable


#1

Привет всем.
Начал изучать Свифт и соответственно сталкиваться с непонятными вещами.
Вот например 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?

Большая просьба помочь в этом разобраться))


#2

Неужели никто не может объяснить? (((