获取用户的当前位置,但返回“可选”加利福尼亚州等

时间:2016-04-09 20:08:05

标签: ios swift location

我正在尝试使用Swift获取用户的当前位置。以下是我目前使用的内容:

import UIKit
import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate {

    let locationManager = CLLocationManager();

    //Info about user
    @IBOutlet weak var userTF: UITextField!
    @IBOutlet weak var BarbCustTF: UITextField!

    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.
    }



    // GPS STUFF
    // UPDATE LOCATION
    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        CLGeocoder().reverseGeocodeLocation(manager.location!) { (placemarks, ErrorType) -> Void in
            if(ErrorType != nil)
            {
                print("Error: " + ErrorType!.localizedDescription);
                return;
            }

            if(placemarks?.count > 0)
            {
                let pm = placemarks![0] ;
                self.displayLocationInfo(pm);
            }
        }
    }

    // STOP UPDATING LOCATION
    func displayLocationInfo(placemark: CLPlacemark)
    {
        self.locationManager.stopUpdatingLocation();
        print(placemark.locality);
        print(placemark.postalCode);
        print(placemark.administrativeArea);
        print(placemark.country);
    }

    // PRINT OUT ANY ERROR WITH LOCATION MANAGER
    func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
        print("Error: " + error.localizedDescription);
    }

一切似乎都很好,但我得到的输出真的很奇怪,并且在前面说可选,并且(不幸的是)不是我当前的位置。

这是我将其打印到控制台时得到的输出

可选( “库珀蒂诺”)

可选( “95014”)

可选( “CA”)

可选(“美国”)

我尝试过的事情: 1)在我的info.plist中,我有:NSLocationWhenInUseUsageDescription 2)我也听说过奇怪的事情,我尝试去调试>>位置>> 并将其更改为城市和各种事情(没有帮助)

我认为这个问题在我的函数LocationManager中与“包装”或其他东西有关吗?我不确定,这是我用Swift搞乱iOS编程的第一天,我真的不知道包装是什么,但我认为这可能是我在互联网上看到的情况......基本上我不明白为什么我打印出一些默认的苹果位置(加利福尼亚......等等)我不住在卡利(不幸的是)。

1 个答案:

答案 0 :(得分:0)

而不是这个

print(placemark.locality);

这样做

if let locality = placemark.locality {
    print(locality)
}

此处的if let模式只是打印locality的方式,如果它不是nil。在这种情况下,这是这样做的方法。

如果您确定locality永远不会nil,那么您可以

print(placemark.locality!)

但如果locality恰好是nil,那么您的应用就会在该行上崩溃。