Ihr Problem hier ist, dass Sie zwingen, die Werte auszupacken und im Falle eines Fehlers können Sie nicht wissen, wo es herkommt.
Stattdessen sollten Sie Fehler behandeln und Ihre Optionals sicher auspacken.
Und wie @vadian richtig in seinem Kommentar notiert, sollten Sie Bundle.main.url
verwenden.
private func readJson() {
do {
if let file = Bundle.main.url(forResource: "points", withExtension: "json") {
let data = try Data(contentsOf: file)
let json = try JSONSerialization.jsonObject(with: data, options: [])
if let object = json as? [String: Any] {
// json is a dictionary
print(object)
} else if let object = json as? [Any] {
// json is an array
print(object)
} else {
print("JSON is invalid")
}
} else {
print("no file")
}
} catch {
print(error.localizedDescription)
}
}
Wenn in Swift Codierung, in der Regel ist !
ein Code Geruch. Natürlich gibt es Ausnahmen (IBOutlets und andere), aber versuchen Sie nicht, sich mit !
selbst auszuwrappen und immer sicher auszupacken.
Was funktioniert nicht? Fügen Sie einen 'do-catch'-Block hinzu, um Fehlerinformationen zu erhalten. "Bundle" hat übrigens eine URL-bezogene API zum Abrufen von Ressourcen. – vadian