Таким образом, в настоящее время, похоже, нет такого свойства, встроенного в независимый от ОС класс SwiftUI Color
; однако UIColor
и NSColor
do предоставляют для него средства доступа (для iOS и macOS соответственно), и вы можете использовать эти старые цветовые объекты для инициализации объекта SwiftUI Color
.
В результате, то, что вам нужно, может быть достигнуто с помощью простого расширения Color
, такого как ниже, которое использует условную компиляцию для корректной работы в любой ОС.
Я также включил ' вторичные '&' третичные 'цвета, которые являются немного субъективными в macOS, но вы всегда можете изменить их на некоторые другие NSColor
свойства, если хотите.
Swift v5.2:
import SwiftUI
public extension Color {
static var background: Color {
#if os(macOS)
return Color(NSColor.windowBackgroundColor)
#else
return Color(UIColor.systemBackground)
#endif
}
static var secondaryBackground: Color {
#if os(macOS)
return Color(NSColor.underPageBackgroundColor)
#else
return Color(UIColor.secondarySystemBackground)
#endif
}
static var tertiaryBackground: Color {
#if os(macOS)
return Color(NSColor.controlBackgroundColor)
#else
return Color(UIColor.tertiarySystemBackground)
#endif
}
}
Затем вы просто получаете к ним доступ из любого места в вашем коде, как и любой другой SwiftUI Color
. Например:
let backgroundColor = Color.background