Apple hat Phantasie neue Fehlerbehandlung in Swift 2Explicit altmodischer Fehler in Swift Handhabung 2
Ich bin mit Projekt arbeiten, das AFNetoworking v2.x verwendet, wo AFHTTPRequestSerializer 2 Selektoren hat:
- (NSMutableURLRequest *)requestWithMethod:(NSString *)method
URLString:(NSString *)URLString
parameters:(id)parameters DEPRECATED_ATTRIBUTE;
- (NSMutableURLRequest *)requestWithMethod:(NSString *)method
URLString:(NSString *)URLString
parameters:(id)parameters
error:(NSError * __autoreleasing *)error;
Zuerst ist veraltet, aber zweite wird automatisch von Swift 2 Compiler in die erste Signatur konvertiert. Old fashioned Verfahren jetzt nicht erlaubt:
var error: NSError?
let request = self!.operationManager.requestSerializer.requestWithMethod(method, URLString: url?.absoluteString, parameters: params, error: error)
gibt mir eine Kompilierung Fehler:
Cannot convert value of type 'NSError?' to expected argument type '()'
Aber brandneue Notation Wähler mit Fehlerverarbeitung veraltet Variante ohne reduziert.
do {
let request = try
self!.operationManager.requestSerializer.requestWithMethod(method, URLString: url?.absoluteString, parameters: params)
} catch let error as NSError {
// ...
}
Was ist Best Practice in Swift 2, um dieses Problem zu lösen? Gibt es eine Möglichkeit, bestimmte Selektoren in dieser Situation anzugeben?
UPD: Genauerer Link auf Swift 2-Funktion, die ein Grund für mein Problem geworden sind. https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns.html#//apple_ref/doc/uid/TP40014216-CH7-ID10
Nun zu verwenden, ich weiß, was ich tun würde; Ich würde eine Trampolin-Methode in Objective-C schreiben. (Und ich würde einen Fehlerbericht mit den AFNetworking Leuten einreichen.) – matt
Ja sieht es wie eine bessere Wahl aus, falls Swift 2 keine Werkzeuge hat, um das selbst zu lösen. Aber ich frage mich, ob Swift-Architekten solche Probleme vorhergesagt haben und sie hatten einen guten Weg, diese Art von Problemen zu überwinden. – lazarev
Sind Sie sicher, dass die veraltete Variante aufgerufen wird? Vielleicht mischt Xcode gerade die Verwarnungswarnungen durcheinander? – Sulthan