Ich versuche, ein bisschen Swift lang aufzunehmen, und frage mich, wie ich das folgende Objective-C in Swift konvertieren kann:
- (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
}
}
Insbesondere muss ich wissen, wie man isKindOfClass
die neue Syntax verwendet.
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
???
if ??? {
// your touch was in a uipickerview ...
}
}
ios
swift
reflection
introspection
lkemitchll
quelle
quelle
Bearbeiten
Wie in der Antwort von @ Kevin ausgeführt , besteht der richtige Weg darin, einen optionalen Typ-Cast-Operator zu verwenden
as?
. Weitere Informationen finden Sie im AbschnittOptional Chaining
UnterabschnittDowncasting
.Bearbeiten 2
Wie in der anderen Antwort des Benutzers @KPM erwähnt , ist die Verwendung des
is
Operators der richtige Weg, dies zu tun.quelle
: UITouch
in diesem herausnehmen, da Typinferenz weiß, was es von deras UITouch
Besetzung istUIPickerView.self
. Ist es richtig?Sie können den Scheck kombinieren und in eine Anweisung umwandeln:
Dann können Sie
picker
innerhalb desif
Blocks verwenden.quelle
if touch.view is UIPickerView {...}
is
oder_
existierte zu dem Zeitpunkt, als diese Frage gestellt wurde, einige Tage nachdem die Sprache zum ersten Mal angekündigt wurde.Ich würde ... benutzen:
quelle
Ein anderer Ansatz, der die neue Swift 2-Syntax verwendet, besteht darin, Guard zu verwenden und alles in einer Bedingung zu verschachteln.
quelle