Votre problème ici est que vous avez la force de les déballer les valeurs et, dans le cas d'une erreur que vous ne pouvez pas savoir d'où il vient.
Au lieu de cela, vous devez gérer les erreurs et en toute sécurité déballer vos options.
Et comme @vadian, à juste titre, note dans son commentaire, vous devez utiliser Bundle.main.url
.
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)
}
}
Lors du codage dans Swift, généralement, !
est une odeur de code. Bien sûr il y a des exceptions (IBOutlets et autres), mais essayez de ne pas utiliser la force d'ôter avec !
vous-même et toujours dérouler en toute sécurité à la place.