Использование 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 ...

}
}
532   5  

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

    Ничего не найдено.