J'essaye de prendre un peu de langage Swift et je me demande comment convertir l'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
la nouvelle syntaxe.
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
???
if ??? {
// your touch was in a uipickerview ...
}
}
ios
swift
reflection
introspection
lkemitchll
la source
la source
Éditer
Comme indiqué dans la réponse de @ Kevin , la bonne façon serait d'utiliser l'opérateur de transtypage de type facultatif
as?
. Vous pouvez en savoir plus à ce sujet dans laOptional Chaining
sous-section de la sectionDowncasting
.Modifier 2
Comme indiqué dans l' autre réponse de l'utilisateur @KPM , utiliser l'
is
opérateur est la bonne façon de le faire.la source
: UITouch
dans celui-ci, car l'inférence de type saura ce que c'est par leas UITouch
castingUIPickerView.self
. Est-ce correct?Vous pouvez combiner le chèque et le convertir en une seule instruction:
Ensuite, vous pouvez utiliser
picker
dans leif
bloc.la source
if touch.view is UIPickerView {...}
is
ou_
n'existait pas au moment où cette question a été posée, quelques jours après l'annonce de la langue.J'utiliserais:
la source
Une autre approche utilisant la nouvelle syntaxe Swift 2 consiste à utiliser guard et tout imbriquer dans un conditionnel.
la source