Ответ 1
UIColor(named: "myColor")
Источник: WWDC 2017 Сессия 237 - Что нового в MapKit
Предостережение. Для цели развертывания вашего проекта необходимо установить iOS 11.0.
Обычно я использую пользовательские UIColors на iOS, используя расширения с Swift, но теперь с iOS11/XCode9 мы можем создавать наборы цветов. Как мы можем их использовать?
Обновление - подсказка
Поскольку @Cœur говорит, что мы можем перетащить и отбросить цвет и использовать его, как объект UIColor, и возможное решение может использовать его как расширение:
Или как константа:
Теперь я хочу знать, можем ли мы получить к ним доступ, как доступ UIImage к изображению объекта или нет, например:
UIImage(named: "image-name") -> UIColor(named: "color-name")
UIColor(named: "myColor")
Источник: WWDC 2017 Сессия 237 - Что нового в MapKit
Предостережение. Для цели развертывания вашего проекта необходимо установить iOS 11.0.
(короткий ответ на вопрос: в Xcode 9.0 есть UIColor(named: "MyColor")
)
Отвечая на исходный вопрос:
он будет переводить в цветной литерал при просмотре исходного кода:
#colorLiteral(red: 0, green: 0.6378085017, blue: 0.8846047521, alpha: 1)
Вы замечаете, как различаются значения красного, зеленого и синего? Это потому, что я определил их с помощью Color Space Display P3
, но colorLiteral использует Color Space sRGB
.
Добавьте набор цветов в каталог активов, назовите его и установите цвет в инспекторе атрибутов, затем вызовите его в коде с помощью UIColor(named: "MyColor")
.
В средстве просмотра каталога активов нажмите кнопку "плюс" в правом нижнем углу основной панели и выберите " Новый набор цветов"
Нажмите на белый квадрат и выберите Инспектор атрибутов (самый правый значок в правой панели)
Оттуда вы можете назвать и выбрать свой цвет.
UIColor(named: "MyColor")
. Это возвращает необязательный параметр, поэтому вам придется разворачивать его в большинстве случаев (это, вероятно, один из немногих случаев, когда развертывание силы приемлемо, поскольку вы знаете, что цвет существует в вашем каталоге активов). Вам нужно использовать UIColor(named: "appBlue")
.
И вы можете создать функцию в расширении UIColor для простого доступа.
enum AssetsColor {
case yellow
case black
case blue
case gray
case green
case lightGray
case seperatorColor
case red
}
extension UIColor {
static func appColor(_ name: AssetsColor) -> UIColor? {
switch name {
case .yellow:
return UIColor(named: "appYellow")
case .black:
return UIColor(named: "appBlack")
case .blue:
return UIColor(named: "appBlue")
case .gray:
return UIColor(named: "appGray")
case .lightGray:
return UIColor(named: "appLightGray")
case .red:
return UIColor(named: "appRad")
case .seperatorColor:
return UIColor(named: "appSeperatorColor")
case .green:
return UIColor(named: "appGreen")
}
}
Вы можете использовать это так
userNameTextField.textColor = UIColor.appColor(.gray)
// iOS
let color = UIColor(named: "SillyBlue")
// macOS
let color = NSColor(named: "SillyBlue")
Вы можете использовать этот способ для простого доступа (Swift 4)
enum AssetsColor: String {
case backgroundGray
case blue
case colorAccent
case colorPrimary
case darkBlue
case yellow
}
extension UIColor {
static func appColor(_ name: AssetsColor) -> UIColor? {
return UIColor(named: name.rawValue)
}
}