2016-07-28 6 views
9

In einer UIView Unterklasse überschreiben, ich bin überschreiben BecomeFirstResponder (das gibt ein BoolSwift. 3: Warnung „Nicht verwendete Ergebnis des Anrufs“, wenn becomeFirstResponder

class MyViewSubclass:UIView { 
... 
    override func becomeFirstResponder() -> Bool { 
     // some stuff 
     return super.becomeFirstResponder() 
    } 
... 
} 

Wenn auf einem Objekt der Unterklasse diese Methode aufrufen, ich erhalte eine Warnung Result of call to 'becomeFirstResponder()' is Unused.

Diese Meldung geschieht nicht nicht, wenn ich becomeFirstResponder nicht außer Kraft setzen.

ich weiß, dass mit Swift 3 das Verhalten der Methoden der Rückkehr Ergebnisse haben sich entwickelt (siehe @discardableResult auf SE-0047), aber ich würde erwarten, dass eine Überschreibung das gleiche Verhalten wie seine Super-Methode hat.

Bin ich falsch daran zu denken, oder ist es vielleicht ein Compiler Bug?

bearbeiten:
FYI, I filed a bug dafür.

+0

Scheint wie ein Fehler für mich. Es könnte natürlich beabsichtigt sein, da Ihre Implementierung möglicherweise völlig anders ist, aber seltsam erscheint. –

+0

Ich habe ein Problem. und ja, ich denke, es ist ein Fehler –

Antwort

1

Ich bin mir nicht sicher, ob es ein Fehler ist. Wenn Sie eine Funktion überschreiben, könnte es durchaus möglich sein, dass der Rückgabewert jetzt nicht ignoriert werden kann. Ich würde einfach @discardableResult hinzufügen, wenn das ist, was Sie wollen:

@discardableResult override open func becomeFirstResponder() -> Bool { 
    // some stuff 
    return super.becomeFirstResponder() 
} 
0

dies den richtigen Weg sein kann, auch tho im nicht-Experten schnell, aber von Objective-C

class MyViewSubclass:UIView { 
... 
    override func becomeFirstResponder() -> Bool { 
     // some stuff 
     super.becomeFirstResponder() 
    return true 
    } 
... 
}