如何使用Swift 3访问字典值?

Noa*_*h-1 1 dictionary firebase swift firebase-realtime-database

所以自从Swift 3发布以来,我访问字典的代码的一部分不再起作用了,这里是以前发布的swift的代码:

var locationDict: NSDictionary?//location dictionary
if let getLocation = item.value?["Location"]{locationDict = getLocation as? NSDictionary}

//get dictionary values
let getLatitude = locationDict?.valueForKey("latitude") as! Double
let getLongitude = locationDict?.valueForKey("longitude") as! Double
Run Code Online (Sandbox Code Playgroud)

现在有了新版本,我不知道如何重写"getLocation".我只用新语法重写了最后两行:

//get dictionary values
let getLatitude = locationDict?.value(forKey: "latitude") as! Double
let getLongitude = locationDict?.value(forKey: "longitude") as! 
Run Code Online (Sandbox Code Playgroud)

我正在使用Firebase,这是完整的功能:(它为地图添加了一个注释数组)

 func setAnnotations(){

    //get data
    ref.child("Stores").observe(.value, with: { (snapshot) in

        self.mapView.removeAnnotations(self.annArray)

        for item in snapshot.children {

            let annotation = CustomAnnotation()

            //set all data on the annotation
            annotation.subtitle = (snapshot.value as? NSDictionary)? ["Category"] as? String
            annotation.title = (snapshot.value as? NSDictionary)? ["Name"] as? String
            annotation.annImg = (snapshot.value as? NSDictionary)? ["Logo"] as? String

            var locationDict: NSDictionary?//location dictionary
            if let getLocation = item.value?["Location"]{locationDict = getLocation as? NSDictionary}


            let getLatitude = locationDict?.value(forKey: "latitude") as! Double
            let getLongitude = locationDict?.value(forKey: "longitude") as! Double

            annotation.coordinate = CLLocationCoordinate2D(latitude: getLatitude, longitude: getLongitude)


            self.annArray.append(annotation)

            self.mapView.addAnnotation(annotation)

        }
    })

}
Run Code Online (Sandbox Code Playgroud)

Dra*_*ian 5

试试这个:-

    func setAnnotations(){

        //get data
        FIRDatabase.database().reference().child("Stores").observe(.value, with: { (snapshot) in

            self.mapView.removeAnnotations(self.annArray)

            for item in snapshot.children{

                if let itemDict = (item as! FIRDataSnapshot).value as? [String:AnyObject]{

                    annotation.subtitle = itemDict["Category"] as! String
                    annotation.title = itemDict["Name"] as! String
                    annotation.annImg = itemDict["Logo"] as! String
                    if let locationDict = itemDict["Location"] as? [String:AnyObject]{

                        let getLatitude = locationDict["latitude"] as! Double
                        let getLongitude = locationDict["longitude"] as! Double

                        annotation.coordinate = CLLocationCoordinate2D(latitude: getLatitude, longitude: getLongitude)
                        self.annArray.append(annotation)

                        self.mapView.addAnnotation(annotation)
                    }
                }
            }
        })

    }
Run Code Online (Sandbox Code Playgroud)