Я часто использую цвета semanti c следующим образом, чтобы получить динамические цвета c для темного и светлого режимов. При таком подходе цвета также будут обновляться во время выполнения, когда пользователь переключает темный / светлый режим:
public static var bw100: UIColor = {
if #available(iOS 13, *) {
return UIColor { (UITraitCollection: UITraitCollection) -> UIColor in
if UITraitCollection.userInterfaceStyle == .dark {
// Return the color for Dark Mode
return .black
} else {
// Return the color for Light Mode
return .white
}
}
} else {
// Return a fallback color for iOS 12 and lower.
return .white
}
}()
Теперь я хочу сделать то же самое со значением Float
, например, с плавающей точкой semanti c вар. Это означает, что я могу получить доступ к другому значению с плавающей запятой для темного режима и для светлого режима И значение будет адаптироваться во время выполнения, если пользователь переключит темный / светлый режим. Я не смог найти решение для этого.
Это НЕ работает , так как не обновляется во время выполнения. Приложение должно быть перезапущено после переключения темного / светлого режима:
public static var myFloat: Float = {
if #available(iOS 13.0, *) {
if UITraitCollection.current.userInterfaceStyle == .dark {
return 0.9
}
else {
return 0.1
}
}
return 0.1
}()
Это также НЕ работает (пробовал подход, аналогичный рабочему выше), но здесь я получаю ошибку Initializer init(_:) requires that (UITraitCollection) -> Float conforms to BinaryInteger
public static var myFloat: Float = {
if #available(iOS 13, *) {
return Float { (UITraitCollection: UITraitCollection) -> Float in
if UITraitCollection.userInterfaceStyle == .dark {
// Return the Float for Dark Mode
return 0.9
} else {
// Return the Float for Light Mode
return 0.1
}
}
} else {
// Return a fallback for iOS 12 and lower.
return 0.1
}
}()