Я пытаюсь взять немного Swift lang, и мне интересно, как преобразовать следующий Objective-C в Swift:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
UITouch *touch = [touches anyObject];
if ([touch.view isKindOfClass: UIPickerView.class]) {
//your touch was in a uipickerview ... do whatever you have to do
}
}
Более конкретно мне нужно знать, как использовать isKindOfClass
в новом синтаксисе.
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
???
if ??? {
// your touch was in a uipickerview ...
}
}
ios
swift
reflection
introspection
lkemitchll
источник
источник
редактировать
Как указано в ответе @ Kevin , правильным способом будет использование необязательного оператора приведения типов
as?
. Вы можете прочитать больше об этом вOptional Chaining
подразделе разделаDowncasting
.Редактировать 2
Как указано в другом ответе пользователя @KPM , использование
is
оператора является правильным способом сделать это.источник
: UITouch
в этом, поскольку вывод типа будет знать, что это заas UITouch
актерский составUIPickerView.self
. Это правильно?Вы можете объединить проверку и привести к одному утверждению:
Тогда вы можете использовать
picker
вif
блоке.источник
if touch.view is UIPickerView {...}
is
или_
существовали на момент этот вопрос был задан, через несколько дней после языка впервые было объявлено.Я хотел бы использовать:
источник
Другой подход, использующий новый синтаксис Swift 2, состоит в том, чтобы использовать guard и вкладывать все это в одно условие.
источник