Ответ 1
Ваша проблема заключается в том, что вы принудительно разворачиваете значения, а в случае ошибки вы не можете знать, откуда она взялась.
Вместо этого вы должны обрабатывать ошибки и безопасно разворачивать свои опции.
И как @vadian правильно отмечает в своем комментарии, вы должны использовать 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)
}
}
При кодировании в Swift обычно !
является запахом кода. Конечно, есть исключения (IBOutlets и другие), но старайтесь не использовать силовую развертку с !
самостоятельно и всегда разворачивать безопасно.