1

我正在通过 Swift 在 Xcode 上创建地图,我正在从 API 创建标记,并且即将从 JSON 中获取经度和纬度并将其转换为双精度,以便我可以获得 CLLocation 并显示标记。然而,当我收到上述信息时,似乎经度转换得很好,因为纬度返回了一条错误消息:

线程 1:致命错误:在展开可选值时意外发现 nil。

通常我指的是调试器,但它发现纬度的可选项不仅不是零,而且返回我试图循环的值之一:(lat String "-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 "{\n\t Landmark Name: \(name)\n\t State: \(id)\n\t id: \(state)\n\t location: \(city)\n\t city: \(String(describing: longitude))\nm\(String(describing: latitude))\nm}"
    }

    override  var debugDescription: String {
        return "{\n\t Landmark Name: \(name)\n\t State: \(id)\n\t id: \(state)\n\t location: \(city)\n\t 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)
    }
}
4

0 回答 0