2016-09-20 4 views
2

Nach der Aktualisierung auf Swift 3 I erhalten Fehler in folgenden Code:Swift 3 UITableViewDataSource Selektoren

extension MyViewController: UITableViewDataSource { 
    //... 

    func tableView(_ tableView: UITableView, 
        heightForRowAt indexPath: IndexPath) -> CGFloat { 
     return someValue 
    } 
} 

Objective-C Methode 'tableview: heightForRowAt:' versehen, durch die Methode ‚tableview (_: heightForRowAt :) 'nicht die Wähler Anforderung entsprechen (' Tableview: heightForRowAtIndexPath: ')

Es kann mit

012 befestigt werden

Könnte jemand erklären, die Motivation der Unterzeichnung in der neuen Version von Swift zu ändern? Es gibt keine Informationen in migration guide darüber.

+1

dies sehen http://stackoverflow.com/questions/39416385/swift-3-objc-optional-protocol-method-not-called-in-subclass –

Antwort

2

Mit der Veröffentlichung Swift 3.0 wurden die Signaturen vieler Methoden in der Bibliothek aus Gründen der Lesbarkeit geändert (siehe API Design Guidelines).

Vergleichen Sie zum Beispiel die aktuelle Signatur der Methode Sie zu seiner Darstellung in der Code-Vervollständigung Vorschlagsliste von Xcode zitiert:

// implementation: 
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {...} 

// code completion: 
tableView(tableView: UITableView, heightForRowAt: IndexPath) 

Im Gegensatz verwendet die vorherige Implementierung redundanter Informationen anzuzeigen:

// implementation: 
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {...} 

// code completion: 
tableView(tableView: UITableView, heightForRowAtIndexPath: NSIndexPath) 
               --------- ----------- 

Weiteren die Durchführung einer Funktion oder Methode erfordert nun ein Unterstrich (_) auch für das erste Argument, um zu ermöglichen, auslassen eingestellt wird Argumente beim Aufruf der Funktion/Methode (siehe: https://stackoverflow.com/a/38192263/6793476).

Offensichtlich einige Wähler in der Bibliothek wurden noch nicht aktualisiert, so dass Sie die richtigen zur Verfügung stellen müssen (die „alte“) Selektornamen (siehe: https://stackoverflow.com/a/39416386/6793476 und für weitere Informationen über Selektoren: https://stackoverflow.com/a/24007718/6793476).

Ich hoffe, dass hilft.