2016-09-29 4 views
2

Ich bin neu zu Apple Swift.Ich versuche, eine Demo-App basierend auf dieser tutorial zu bauen. Ich habe festgestellt, dass die App nicht funktioniert. Nach einigen Versuch und scheitert, habe ich festgestellt, dass, wenn ich die Codezeile ändern:In welcher Situation sollte ich _ als Parameter in swift verwenden

func textFieldDidEndEditing(textField: UITextField) { 

zu

func textFieldDidEndEditing(_ textField: UITextField) { 

Ich kann den Code korrekt ausgeführt wird.

Ich möchte wissen, was passiert, indem Sie _ als eines der Argumente hinzufügen. Beide Methoden führen nicht zu Kompilierungsfehlern. Aber das erste man tut geben Warnungen wie:

ViewController.swift:35:10: Instance method 'textFieldDidEndEditing(textField:)' 
nearly matches optional requirement 'textFieldDidEndEditing' of protocol 'UITextFieldDelegate' 

Da das erste von Apple Tutorial gegeben ist, bin ich nicht sicher, ob es ein Fehler ist. Kann jemand meine Zweifel klären?

+0

ich die neueste Version von Xcode bin mit – user3588276

+0

Sie die richtige Antwort hier haben kann: [? Was ist _ Unterstreichungs Vertreter in Swift Referenzen] (http://StackOverflow.com/questions/244437388/whats-the-underscore-representative-of-in-swift-references) –

Antwort

2

Ich denke, dass Sie Swift 3.0 verwenden. Das Tutorial, dem Sie folgen, könnte eine Swift 2.2- oder Swift 2.3-Version sein. Es ist nichts anderes als eine Syntaxänderung von dem, was ich beobachtet habe. Auch stand ich diese Situation gestern, als ich zu Xcode aktualisiert 8,0

0

, wenn Sie mehrere Parameter ohne externen Namen wollen, müssen Sie die“_“ Unterstrich als externen Namen verwenden:

1

Von Swift 3 Erstes Argument Etiketten sind auch der Standard für Initialisierer.

Swift 3 Evolution

erste Parameter Erklärungen wird das bestehende Verhalten der zweiten und späteren Parametern entsprechen. Alle Parameter, unabhängig von ihrer Position, verhalten sich einheitlich. Dadurch wird ein einfacher, konsistenter Ansatz für die Parameterdeklaration in der Swift-Programmiersprache erstellt und Methoden- und Funktionsdeklarationen werden synchron mit Initialisierern gebracht, die diesen Standard bereits verwenden.

Zum Beispiel

func foo(x: Int, y: Int) 

erklären foo(x:y:) und nicht foo(_:,y:).

Die bestehenden externen Etikettenüberschreibungen gelten weiterhin für die ersten Parameter. Sie erstellen externe Parameternamen vor dem lokalen Parameternamen, der von einem Leerzeichen getrennt ist. Zum Beispiel

func foo(xx x: Int, yy y: Int) //declares foo(xx:yy:) and 

func foo(_ x: Int, y: Int) //explicitly declares foo(_:y:) 

mehr über erste Parameter Lesen in SE-0046

Verwandte Themen