Я портировал ObjectiveC
изготовленный под заказ UIView
подклассы до Swift
этим утром. Желая сделать его более «объектно ориентированным», я следовал примеру расширения CGContext
методами. Например.CGContext И CGContextRef то же самое в Swift? Как это работает?
extension CGContext {
func fillColor(color:UIColor) {
CGContextSetFillColorWithColor(self, color.CGColor)
}
}
Потому что я преобразование сообщений объективного стиля C (например -(void) drawOutline: (CGContextRef) cr {...}
) в Swift того стиля, не обращая слишком много внимания (например, func drawOutline(cr:CGContextRef) {...}
), я не сразу понял, что я проходил CGContextRef
аргументов, но был расширенный CGContext
(не справка). Но это сработало!
Что было странно, когда я сменил те CGContextRef
на CGContext
. И он все еще работал. Не просто скомпилирован, но побежал и рисовал правильно. Для удовольствия я изменился на extension CGContextRef
. И все же он по-прежнему продолжает работать. Это как если бы Свифт был достаточно умен, чтобы сварить их до одного и того же. Это? Или здесь что-то более тонкое/круто происходит здесь?
Obijective-C и Swift. И вы добавили тег C только для удовольствия, я думаю. – Olaf
Не для удовольствия. Возможно, из-за ошибочной путаницы. Используемые здесь части «ObjectiveC» строго «C» (помните, что ObjectiveC является надмножеством C). 'CGContext' - строгая C-непрозрачная структура. И 'CGContextRef' - это typedef для указателя на то же самое. Думаю, я сделал C, потому что это больше вопрос о том, как Swift переводит части C, чем ObjectiveC. –