2016-06-21 8 views
14

In Obj-C, eine gängige Praxis war Komfortfunktionen zu nutzen gemeinsame Operationen durchzuführen, wie automatische Konfiguration Layout für Ansichten:Ergebnis Aufruf [myFunction] nicht verwendet wird

func makeConstraint(withAnotherView : UIView) -> NSLayoutConstraint 
{ 
    // Make some constraint 
    // ... 

    // Return the created constraint 
    return NSLayoutConstraint() 
} 

Wenn Sie gerade zu setzen benötigt die Einschränkung und vergessen Sie es, Sie nennen könnte:

[view1 makeConstraint: view2]

Wenn Sie die Einschränkung später speichern wollte, so dass Sie könnte entfernen/ändern es, würden Sie so etwas wie tun:

NSLayoutConstraint * c; 
c = [view1 makeConstraint: view2] 

Ich möchte dies in geschickter tun, aber wenn ich die obige Funktion aufrufen und haben die zurück Einschränkung nicht erfassen, erhalte ich die Warnung:

Result of call to 'makeConstraint(withAnotherView:)' is unused 

sehr ärgerlich. Gibt es eine Möglichkeit, Swift wissen zu lassen, dass ich den Rückgabewert nicht immer erfassen möchte?

HINWEIS: Ich weiß darüber. Es ist hässlich und nicht das, was ich suche:

Antwort

24

Dieses Verhalten wurde in Swift 3 eingeführt. Anstatt die Funktionen explizit mit @warn_unused_result annotieren zu müssen, um dem Compiler mitzuteilen, dass das Ergebnis vom Aufrufer verwendet werden soll, ist dies jetzt das Standardverhalten.

Sie können das Attribut @discardableResult für Ihre Funktion verwenden, um den Compiler zu informieren, dass der Rückgabewert nicht vom Aufrufer "konsumiert" werden muss.

@discardableResult 
func makeConstraint(withAnotherView : UIView) -> NSLayoutConstraint { 

    ... // do things that have side effects 

    return NSLayoutConstraint() 
} 

view1.makeConstraint(view2) // No warning 

let constraint = view1.makeConstraint(view2) // Works as expected 

Sie über diese Änderung auf the evolution proposal genauer lesen.

+0

Auf der einen Seite können Sie @discardableResult einmal setzen und alle reparieren, aber auf der anderen Seite können Sie es nicht mit Ihren Pods machen. Sie ignorieren also das Ergebnis, indem Sie vor dem Funktionsaufruf _ = hinzufügen –

0

Sie können versuchen, die Warnungen aus den Build-Einstellungen Ihres Projekts auszuschalten. Ich mag die Frage, guter Punkt. Habe etwas Recherche gemacht und das gefunden. https://stackoverflow.com/a/34932152/5615274

Habe es noch nicht getestet.

Verwandte Themen