Использование isKindOfClass с Swift
Я пытаюсь подобрать немного Swift lang, и мне интересно, как преобразовать следующую цель-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 ...
}
}
5 ответов:
правильный оператор Swift является
is:if touch.view is UIPickerView { // touch.view is of type UIPickerView }конечно, если вам также нужно назначить представление новой константе, то
if let ... as? ...синтаксис-это ваш мальчик, как Кевин упомянул. Но если вам не нужно значение и нужно только проверить тип, то вы должны использоватьisоператора.
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { super.touchesBegan(touches, withEvent: event) let touch : UITouch = touches.anyObject() as UITouch if touch.view.isKindOfClass(UIPickerView) { } }Edit
как указано в @Кевина, правильным способом было бы использовать дополнительный тип cast operator
as?. Вы можете прочитать больше об этом в разделеOptional ChainingподпунктеDowncasting.Изменить 2
как указано на другой ответ пользователя @KPM, С помощью
isоператор-это правильный способ сделать это.
вы можете объединить чек и привести в один оператор:
let touch = object.anyObject() as UITouch if let picker = touch.view as? UIPickerView { ... }затем вы можете использовать
pickerвнутриifблок.
Я хотел бы использовать:
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { super.touchesBegan(touches, withEvent: event) let touch : UITouch = touches.anyObject() as UITouch if let touchView = touch.view as? UIPickerView { } }
другой подход, использующий новый синтаксис Swift 2, заключается в использовании guard и вложении всего этого в одно условие.
guard let touch = object.AnyObject() as? UITouch, let picker = touch.view as? UIPickerView else { return //Do Nothing } //Do something with picker
Comments