J'essaie de récupérer un peu de Swift lang et je me demande comment convertir l'objet Objective-C suivant 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
}
}
Plus précisément, j'ai besoin de savoir comment utiliser isKindOfClass
dans la nouvelle syntaxe.
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
???
if ??? {
// your touch was in a uipickerview ...
}
}
Le bon opérateur Swift est is
:
if touch.view is UIPickerView {
// touch.view is of type UIPickerView
}
Bien sûr, si vous devez également affecter la vue à une nouvelle constante, la syntaxe if let ... as? ...
est votre garçon, comme l'a mentionné Kevin. Mais si vous n'avez pas besoin de la valeur et que vous n'avez besoin que de vérifier le type, vous devez alors utiliser l'opérateur 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)
{
}
}
Modifier
Comme indiqué dans @ Kevin répond , la méthode correcte consiste à utiliser l'opérateur de transtypage de type facultatif as?
. Vous pouvez en savoir plus à ce sujet dans la section Optional Chaining
sous-section Downcasting
.
Éditer 2
Comme indiqué sur le autre réponse de l'utilisateur @KPM , utiliser l'opérateur is
est la bonne façon de procéder.
Vous pouvez combiner le chèque et le transformer en une seule déclaration:
let touch = object.anyObject() as UITouch
if let picker = touch.view as? UIPickerView {
...
}
Ensuite, vous pouvez utiliser picker
dans le bloc if
.
J'utiliserais:
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
{
}
}