Apple ha introdotto fantasia nuova gestione degli errori a Swift 2esplicita vecchia gestione a Swift errore antiquato 2
Sto lavorando con progetto che utilizza AFNetoworking v2.x dove AFHTTPRequestSerializer dispone di 2 selettori:
- (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;
Il primo è deprecato ma il secondo viene convertito automaticamente in prima firma dal compilatore Swift 2. Vecchio metodo ora non consentito:
var error: NSError?
let request = self!.operationManager.requestSerializer.requestWithMethod(method, URLString: url?.absoluteString, parameters: params, error: error)
mi dà un errore di compilazione:
Cannot convert value of type 'NSError?' to expected argument type '()'
Ma nuova notazione riduce selettore con l'elaborazione di errore per variante deprecato senza di essa.
do {
let request = try
self!.operationManager.requestSerializer.requestWithMethod(method, URLString: url?.absoluteString, parameters: params)
} catch let error as NSError {
// ...
}
Qual è la migliore pratica in Swift 2 per risolvere questo problema? C'è un modo per specificare un determinato selettore in questa situazione?
UPD: collegamento più preciso sulla funzione Swift 2 che diventa una ragione del mio problema. https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns.html#//apple_ref/doc/uid/TP40014216-CH7-ID10
Beh, so cosa avrei fatto; Scriverò un metodo di trampolino in Objective-C. (E presenterei un bug report con gli utenti di AFNetworking.) – matt
Sì, sembra una scelta migliore nel caso in cui Swift 2 non abbia strumenti per risolvere questo problema. Ma mi chiedo se gli architetti di Swift abbiano previsto tali problemi e avessero in mente un modo corretto di superare questo tipo di problemi. – lazarev
Sei sicuro che la variante deprecata sia stata chiamata? Forse Xcode mescola solo gli avvisi di deprecazione? – Sulthan