Swift - UIColor.black аварийно завершает работу приложения при преобразовании из UIColor в строку - PullRequest
0 голосов
/ 22 января 2019

Приведенный ниже код прекрасно работает, например, с UIColor.Purple или UIColor.Yellow, но при использовании UIColor.black происходит сбой приложения.

Неустранимая ошибка: индекс выходит за пределы диапазона, это похоже на компоненты [2] и[3] не существует, когда используется UIColor.black.Я знаю, что я принудительно разворачиваюсь, но разве не все цвета должны иметь RGBA?

//UIColor RGBA to string
public extension UIColor {

class func StringFromUIColor(color: UIColor) -> String{
    let components = color.cgColor.components
    return "[\(components![0]), \(components![1]), \(components![2]), \(components![3])]"
}

class func UIColorFromString(string: String) -> UIColor {
    let componentsStringStepOne = string.replacingOccurrences(of: "[", with: "")
    let componentsString = componentsStringStepOne.replacingOccurrences(of: "]", with: "")
    let components = componentsString.components(separatedBy: ", ")
    return UIColor(red: CGFloat((components[0] as NSString).floatValue), green: CGFloat((components[1] as NSString).floatValue), blue: CGFloat((components[2] as NSString).floatValue), alpha: CGFloat((components[3] as NSString).floatValue))
}

}

и есть ли лучший способ написать эту часть кода?

let componentsStringStepOne = string.replacingOccurrences(of: "[", with: "")
    let componentsString = componentsStringStepOne.replacingOccurrences(of: "]", with: "")
    let components = componentsString.components(separatedBy: ", ")

Любая помощь приветствуется!Спасибо.

1 Ответ

0 голосов
/ 22 января 2019

Это решение, которое я придумала после ответа rmaddy и kamran. Это не сбой приложения, и я получаю правильные цвета. Это сохраняет в списке, как я хочу, чтобы он выглядел, например, черный или цветной. [0.2,0.4,0.5,1.0]. Спасибо за помощь

public extension UIColor {

class func StringFromUIColor(color: UIColor) -> String{
    let components = color.cgColor.components
    if components?.count == 2 {
         return "[\(components![0]), \(components![0]), \(components![0]), \(components![1])]"
    } else {
        return "[\(components![0]), \(components![1]), \(components![2]), \(components![3])]"
    }
}

class func UIColorFromString(string: String) -> UIColor {
    let componentsStringStepOne = string.replacingOccurrences(of: "[", with: "")
    let componentsString = componentsStringStepOne.replacingOccurrences(of: "]", with: "")
    let components = componentsString.components(separatedBy: ", ")
    if components.count == 2 {
        return UIColor(white: CGFloat((components[0] as NSString).floatValue), alpha: CGFloat((components[1] as NSString).floatValue))
    } else {
          return UIColor(red: CGFloat((components[0] as NSString).floatValue), green: CGFloat((components[1] as NSString).floatValue), blue: CGFloat((components[2] as NSString).floatValue), alpha: CGFloat((components[3] as NSString).floatValue))
    }
  }
}
...