Je souhaite convertir la couleur de vue SwiftUI en composant UIKit UIcolor. J'ai essayé plusieurs façons et je me réfère également au StackOverflow déjà donné des réponses, mais cela n'a pas fonctionné. Il a également été mentionné par certains utilisateurs dans ces messages. J'ai parcouru le code ci-dessous qui est proposé par turingtested
mais ça ne fonctionne pas. Toute suggestion ou aide est vraiment appréciée.
fileprivate extension Color {
func uiColor() -> UIColor {
let components = self.components()
return UIColor(red: components.r, green: components.g, blue: components.b, alpha: components.a)
}
private func components() -> (r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat) {
let scanner = Scanner(string: self.description.trimmingCharacters(in: CharacterSet.alphanumerics.inverted))
var hexNumber: UInt64 = 0
var r: CGFloat = 0.0, g: CGFloat = 0.0, b: CGFloat = 0.0, a: CGFloat = 0.0
let result = scanner.scanHexInt64(&hexNumber)
if result {
r = CGFloat((hexNumber & 0xff000000) >> 24) / 255
g = CGFloat((hexNumber & 0x00ff0000) >> 16) / 255
b = CGFloat((hexNumber & 0x0000ff00) >> 8) / 255
a = CGFloat(hexNumber & 0x000000ff) / 255
}
return (r, g, b, a)
}
}
Fondamentalement, Apple n'a pas l'intention que vous fassiez cette conversion. SwiftUI Color
est un View
, et la conception du framework est que les données circulent vers un View
, qui est alors affiché. Vous n'êtes jamais censé extraire les données d'un View
.
Si vous avez besoin d'utiliser les composants d'une couleur, vous devez travailler avec UIColor
, puis convertir en Color
au moment où vous êtes prêt à l'afficher.
Si vous essayez d'obtenir les composants des couleurs système comme Color.red
, Je pense que ce sont les mêmes que les adaptatifs UIColor.systemRed
, qui a des composants accessibles.
Couleurs standard documentation