Как получить доступ к свойствам layer у подклассов UIControl в iOS 13/XCode 11 с использованием UIKIt?

В iOS 13 и Xcode 11 UIKit предоставляет возможность получить доступ к свойствам layer у подклассов UIControl. Для того чтобы это сделать, необходимо использовать концепцию Key-Value Coding (KVC) и Key-Value Observing (KVO).

Прежде всего, позвольте мне объяснить, что такое KVC и KVO. KVC - это механизм, который позволяет получить доступ к свойствам объекта посредством ключей, а не напрямую через синтаксис точки. KVO - это механизм, который позволяет отслеживать изменения свойств объектов.

Итак, для того чтобы получить доступ к свойствам layer у подклассов UIControl, вы можете использовать метод setValue(_:forKey:) класса UIControl:

yourControl.setValue(yourLayer, forKey: "layer")

где yourControl - экземпляр класса UIControl, для которого вы хотите получить доступ к свойству layer, а yourLayer - экземпляр класса CALayer, который вы хотите установить в качестве значения свойства layer.

Важно отметить, что это решение неофициальное и может нарушать принципы безопасности языка Swift. Однако, если вы абсолютно уверены в том, что необходимо получить доступ к свойству layer у подклассов UIControl, использование KVC является единственным вариантов в данном случае.

Например, если у вас есть экземпляр класса UIButton и вы хотите установить свойство cornerRadius для его layer с значением 10, вы можете сделать следующее:

let button = UIButton()
let layer = button.layer
layer.cornerRadius = 10
button.setValue(layer, forKey: "layer")

Теперь свойство layer вашего UIButton будет иметь значение, которое вы задали, и вы сможете его использовать для дальнейших манипуляций с анимацией, градиентами и т.д.

Но, так как это неофициальное решение, вам следует быть осторожным с его использованием и убедиться, что вы действительно нуждаетесь в доступе к свойству layer у подклассов UIControl.