【问题标题】:Cannot subscript a value of type [CLPlacemark] with an index type int无法使用索引类型 int 为 [CLPlacemark] 类型的值下标
【发布时间】:2015-06-14 13:26:33
【问题描述】:

我想检索当前位置。我在 swift Xcode 7 上工作。 我查看了 PLUSIEUR 教程,但每次他们都使用相同的方法。 这是我的代码和我的错误: !

错误:无法使用索引为 [CLPlacemark] 类型的值下标 输入int

import UIKit
import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate {

    let LocationManager = CLLocationManager()

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    self.LocationManager.delegate = self
    self.LocationManager.desiredAccuracy = kCLLocationAccuracyBest
    self.LocationManager.requestWhenInUseAuthorization()
    self.LocationManager.startUpdatingLocation()

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}



func locationManager(manager: CLLocationManager, didUpdateLocations locations: [AnyObject]) {
    CLGeocoder().reverseGeocodeLocation(manager.location!, completionHandler: { (placemarks, error) -> Void in

        if (error != nil) {
            print("Error")
            return
        }

        if placemarks!.count > 0 {
            let pm = placemarks[0] as CLPlacemark
            self.displayLocationInfo(pm)
        }
        else {
            print("errorData")
        }

    })
}

func displayLocationInfo(placemark: CLPlacemark){
    self.LocationManager.stopUpdatingLocation()

    print(placemark.locality)
    print(placemark.postalCode)
    print(placemark.administrativeArea)
    print(placemark.country)
}

func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
    print("Error:" + error.localizedDescription)

    }
}

【问题讨论】:

    标签: ios xcode swift ios8 xcode7


    【解决方案1】:

    不,在 Xcode 7 中,错误是:

    错误:不能为“[CLPlacemark] 类型的值下标?”具有“Int”类型的索引

    注意?。你必须解开那个可选的。所以你可以替换:

    if placemarks!.count > 0 {
        let placemark = placemarks[0] as CLPlacemark
        self.displayLocationInfo(placemark)
    }
    

    与:

    if let placemark = placemarks?.first {
        self.displayLocationInfo(placemark)
    }
    

    【讨论】:

      【解决方案2】:

      我也在几乎相同的情况下遇到了这个问题。再次提示的是,它认为它没有拆包,所以放一个!对我有用。

      试试这个。

      let pm = placemarks![0] as CLPlacemark
      

      【讨论】:

        【解决方案3】:
             if placemarks!.count > 0
                {
                     var pm:CLPlacemark!
        
                    pm = placemarks![0] as CLPlacemark
                    //let pm:CLPlacemark = placemarks.
        
                    self.displayLocationInfo(pm)
        
                    let locality = (pm.locality != nil) ? pm.locality : ""
        
                    let sublocality = (pm.subLocality != nil) ? pm.subLocality : ""
        
                    let thoroughfare = (pm.thoroughfare != nil) ? pm.thoroughfare : ""
        
                    let country = (pm.country != nil) ? pm.country : ""
        
                    let administrativeArea = (pm.administrativeArea != nil) ? pm.administrativeArea : ""
        
                    print(pm.subLocality)
        
                    var annotation = MKPointAnnotation()
                    annotation.coordinate = coordinate
                    annotation.title = "\(thoroughfare) \(sublocality), \(locality)"
                    annotation.subtitle = "\(administrativeArea), \(country)";
        
                    self.mapViewForVisitLocation.addAnnotation(annotation)
                }
        

        它适用于 X-Code 7 和 Swift 2.0。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多