tutorial para espaƱol descargar curso apple ios swift

ios - para - Usando isKindOfClass con Swift



swift download (5)

Estoy tratando de aprender un poco de lenguaje Swift y me pregunto cómo convertir el siguiente Objective-C en 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 } }

Más específicamente, necesito saber cómo usar isKindOfClass en la nueva sintaxis.

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { ??? if ??? { // your touch was in a uipickerview ... } }


El operador Swift adecuado is :

if touch.view is UIPickerView { // touch.view is of type UIPickerView }

Por supuesto, si también necesita asignar la vista a una nueva constante, entonces if let ... as? ... if let ... as? ... sintaxis es tu chico, como mencionó Kevin. Pero si no necesita el valor y solo necesita verificar el tipo, debe usar el operador is .


Otro enfoque que utiliza la nueva sintaxis de Swift 2 es usar guard y anidar todo en un condicional.

guard let touch = object.AnyObject() as? UITouch, let picker = touch.view as? UIPickerView else { return //Do Nothing } //Do something with picker


Puede combinar el cheque y convertir en una declaración:

let touch = object.anyObject() as UITouch if let picker = touch.view as? UIPickerView { ... }

Luego puedes usar el picker dentro del bloque if .


Yo usaría:

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 { } }


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) { } }

Editar

Como se señaló en la respuesta de @Kevin , la forma correcta sería utilizar un operador de conversión de tipo opcional as? . Puede leer más sobre esto en la sección Optional Chaining .

Editar 2

Como lo señaló la otra respuesta del usuario @KPM , usar el operador is es la forma correcta de hacerlo.