Nehmen wir an, wir haben eine Swift-Klasse mit einem Initialisierer, der einen Fehler auslösen kann. Diese Klasse muss in Objective-C
Code-Basis (NSObject
Unterklasse) verwendet werden:Wie überbrückbare Swift Initialisierer mit Objective-C-Code?
import Foundation
enum EvenError : ErrorType {
case NonEvenNumber
}
class FooEven : NSObject {
var evenNumber : UInt
init(evenNumber: UInt) throws {
guard evenNumber % 2 == 0 else {
throw EvenError.NonEvenNumber
}
self.evenNumber = evenNumber
}
}
Produziert Warnung Kompilation:
<unknown>:0: warning: no calls to throwing functions occur within 'try' expression
Ich kann in zwei Möglichkeiten, um diese Warnung arbeiten:
- von throwable ersetzen Initialisierer (
init... -> throws
) mit einem fehlbaren (init?
) - Aufgeben auf Subklassen von
NSObject
Doch diese Art und Weise werde ich:
- lose Informationen über einen Fehler verursacht die Ausnahme,
- haben Fälle von FooEven optionals zu machen und/oder behandeln viele:
if let fooEven = FooEven.init() {...}
Aussagen - ... oder ich werde es nicht in bestehende
Objective-C
Code zu verwenden in der Lage:
Keines der obigen erfüllt meine Bedürfnisse/Anforderungen.
Gibt es eine andere Möglichkeit, diese Warnung zu entfernen, ohne Informationen über den Fehler zu verlieren?
Können Sie eine Closure verwenden, die ein NSError-Objekt enthält, um die Fehlerinformationen zu erfassen? Ich weiß nicht viel über Swift, Entschuldigung. – fsb
Ich habe keine Antwort für dich, aber hast du das jemals gelöst? In das gleiche Problem hineinlaufen. – chrismanderson
Leider nicht – Lukasz