#ios #swift #xcode-debugger
#iOS #swift #xcode-debugger
Вопрос:
Я создаю карту в Xcode через Swift, где я создаю маркеры из API и собираюсь взять долготу и широту из JSON и преобразовать их в double, чтобы я мог получить местоположение и отобразить маркер. Тем не менее, когда я получаю указанную информацию, кажется, что долгота преобразуется нормально, поскольку широта возвращает сообщение об ошибке:
Поток 1: Фатальная ошибка: неожиданно обнаружено значение nil при развертывании необязательного значения.
Обычно я обращаюсь к отладчику, но за исключением того, что он обнаруживает, что необязательное значение для широты не только не равно нулю, но и возвращает одно из значений, которые я пытаюсь перебрать: (строка широты » -91.849071″). Тем не менее, несмотря на это, ошибка не устраняется. Есть ли что-то, чего мне не хватает? Я включил весь свой код из файла swift, чтобы показать все, что я сделал, чтобы я мог показать все, что определяет или нет (извините за длинную вставку)
import Foundation
import CoreLocation
import MapKit
class apiInfo: NSObject, MKAnnotation {
var city = ""
var name = ""
var state = ""
var id = ""
//var location : CLLocation?
var longitude = 0.0
var latitude = 0.0
//needed for the MKAnnotation protocol
var coordinate: CLLocationCoordinate2D {
get {
let location = CLLocation(latitude:latitude, longitude:longitude)
return location.coordinate
}
}
//DEFINING VARIABLES
override var description : String {
return "{nt Landmark Name: (name)nt State: (id)nt id: (state)nt location: (city)nt city: (String(describing: longitude))nm(String(describing: latitude))nm}"
}
override var debugDescription: String {
return "{nt Landmark Name: (name)nt State: (id)nt id: (state)nt location: (city)nt city: (String(describing: longitude))nm(String(describing: latitude))nm}"
}
//CONSTRUCTORS
init(name: String, state: String, city: String, id: String, latitude: Double, longitude: Double) {
self.name = name
self.city = city
self.state = state
self.id = id
self.latitude = latitude
self.longitude = longitude
}
//optional - required with set callout true
var title : String? {
get {
return name
}
}
var subtitle : String? {
get {
return state
}
}
//Mutators
init(name:String, city:String, state:String, id:String, latitude: Double, longitude: Double, location: CLLocation ) {
super.init()
self.name = name
self.city = city
self.state = state
self.id = id
self.longitude = longitude
self.latitude = latitude
}
//MUTATORS
init(json:[String:Any]) {
//print("##### (json)")
if let n = json["Name"] as? String {
name = n
}
if let c = json["City"] as? String {
city = c
}
if let s = json["State"] as? String {
state = s
}
if let i = json["id"] as? String {
id = i
}
if let lng = json["Long"] as? String {
'''
longitude = Double(lng)! //WORKS FINE
'''
}
if let lat = json["Lat"] as? String {
'''
latitude = Double(lat)!
''' //RETURNING NIL
}
}
//parsing from JSON
// final convenience int
override convenience init() {
self.init(name: "Unknown", state: "Unknown", city:"Unknown" , id: "Unknown", latitude: 0.0, longitude: 0.0)
}
}
Комментарии:
1. Если вы добавите
print("Lat="(lat)"")
сразу послеif let lat = json["Lat"] as? String {
строки, каков точный результат?2. Я не уверен, что это опечатка, но <(lat String » -91.849071″)> , в этом есть пробел, который приведет к тому, что преобразование вернет nil .
3. Я только что понял, что в JSON API, который я использовал, было свободное место……