Próbuję uchwycić trochę Szybkiego języka i zastanawiam się, jak przekonwertować następujący Cel C w 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ówiąc dokładniej, muszę wiedzieć, jak korzystać isKindOfClass
z nowej składni.
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
???
if ??? {
// your touch was in a uipickerview ...
}
}
ios
swift
reflection
introspection
lkemitchll
źródło
źródło
Edytować
Jak wskazano w odpowiedzi @ Kevina , poprawnym sposobem byłoby użycie opcjonalnego operatora rzutowania
as?
. Możesz przeczytać więcej na ten temat wOptional Chaining
podsekcji sekcjiDowncasting
.Edytuj 2
Jak wskazano w drugiej odpowiedzi użytkownika @KPM , użycie
is
operatora jest właściwym sposobem na zrobienie tego.źródło
: UITouch
w tym, ponieważ wnioskowanie na podstawie typu będzie wiedzieć, co to jest zas UITouch
obsadąUIPickerView.self
. Czy to jest poprawne?Możesz połączyć czek i rzutować w jedną instrukcję:
Następnie możesz użyć
picker
wif
bloku.źródło
if touch.view is UIPickerView {...}
is
lub_
istniały w momencie to pytano, kilka dni po raz pierwszy ogłosił języku.Użyłbym:
źródło
Innym podejściem wykorzystującym nową składnię Swift 2 jest użycie wartownika i zagnieżdżenie go w jednym warunku.
źródło