Итак, что это такое, есть filed bug for swift, относящийся к типам CoreFoundation. Основываясь на описании, похоже, что для CGPath и CGColor нет проверки типов, ниже - фрагмент из ошибки, которая демонстрирует поведение.Как я могу ввести проверку CGColor/CGPath?
func check(a: AnyObject) -> Bool {
return a is CGColor
}
check("hey") --> true
check(1.0) --> true
check(UIColor.redColor()) --> true
И вот что я пытаюсь сделать
if let value = self.valueForKeyPath(keyPath) {
if let currentValue = value as? CGColor {
// Do Something with CGColor
} else if let currentValue = value as? CGSize {
// Do Something with CGSize
} else if let currentValue = value as? CGPoint {
// Do Something with CGPoint
}
}
Я сделал следующее, путем проверки типа типа типы я знаю, работать первым, то пометки на последнем заявлении для AnyObject , и проверка CFTypeID. Это работает пока, но Apple Documentation говорит, что CFTypeID может измениться, и на него не следует полагаться.
if let currentValue = value as? CGPoint {
// Do Something with CGPoint
} else if let currentValue = value as? CGSize {
// Do Something with CGSize
} else if let currentValue = value as? AnyObject {
if CFGetTypeID(currentValue) == 269 {
// Cast and do Something with CGColor
methodCall((currentValue as! CGColor))
}
}
Кто-нибудь нашел надежное обходное решение a для этой проблемы? Поскольку я не хочу использовать этот хак в качестве долгосрочного решения
Я не знаком с этой проблемой, но вместо сравнения с жесткой кодировкой константы '269 'вы можете сравнить с' CGColorGetTypeID() '. –
@MartinR удивительно, это именно то, что я искал !! Я не хотел жестко кодировать это значение, если оно изменилось :) – AntonTheDev