Ich verwende setValue
, um Eigenschaften in meiner Klasse festzulegen und ein sehr seltsames Verhalten zu erhalten. Beim Versuch, eine bestimmte Eigenschaft festzulegen, wird die Ausführung meine Funktion unterbrechen und von dem, was sie aufgerufen hat, weitergehen. Keine Kompilierungsfehler und keine Fehler in der Debug-Konsole. Stripped Beispiel hier:XCode fängt keinen Fehler
class User: NSObject{
var profilePictureURL: NSURL?
var contextId: String?
var isOnboarded: Bool?
func populate(data: [String: AnyObject]){
for(key,value) in data {
switch key {
case "profilePictureURL":
self.setValue(NSURL(string: String(value)), forKey: key)
}
case "contextId":
self.setValue(String(value), forKey: key)
}
case "isOnboarded":
if let boolValue = value as? Bool {
self.setValue(boolValue, forKey: key) // Here is the problem line
}
}
}
}
Ich setze einige Haltepunkte und führen Sie die App. Wenn ich mit einigen Benutzerdaten auffüllen, funktioniert setValue
ordnungsgemäß für profilePictureURL
und contextId
. Aber sobald es die setValue
für die isOnboarded
Bool
erreicht, existiert es nur meine Funktion, als ob es eine return
-Anweisung wäre. Kein Fehler, nichts im Debug-Fenster. Ich setze einen Haltepunkt auf dieser Linie, verifiziere, dass boolVal
tatsächlich als Bool
getippt wird, und versuche, über die Linie zu treten. XCode bricht dann aus dieser Klasse heraus, setzt niemals diese Variable und stoppt am nächsten Haltepunkt (in einer anderen Klasse). Es beendet nur die Funktion. Es ist bizarr.
Wenn es einen Fehler gab, würde ich erwarten, dass XCode mich auf irgendeine Weise benachrichtigt. Nur die Ausführung bis zum nächsten Haltepunkt zu überspringen, macht dies unmöglich zu debuggen. Ich habe keine Ahnung, was mit diesem Code nicht stimmt.
Gibt es etwas, das ich hier hinzufügen kann, um festzustellen, was das Problem ist? Ist das ein seltsamer Swift/Xcode Bug?
Edit: Ich habe versucht, DerivedData zu löschen und Clean ausgeführt.
Edit 2: Ich konnte das nicht herausfinden. Ich hatte einige Tippfehler in meinem Beispielcode oben, aber sie waren für das vorliegende Problem nicht relevant. Aus irgendeinem Grund setValue
verhält sich wie ein return
, verlassen Sie einfach die Funktion ohne Fehler. Ich habe wie so wieder explizit Einstellwerten gefallen:
self.contentId = String(value)
Überprüfen Sie die geschweiften Klammern in Ihrem Switch-Fall ... zu viele Abschlubkonzert. – BallpointBen