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.