我正在尝试使用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编程的第一天,我真的不知道包装是什么,但我认为这可能是我在互联网上看到的情况......基本上我不明白为什么我打印出一些默认的苹果位置(加利福尼亚......等等)我不住在卡利(不幸的是)。
答案 0 :(得分:0)
而不是这个
print(placemark.locality);
这样做
if let locality = placemark.locality {
print(locality)
}
此处的if let
模式只是打印locality
的方式,如果它不是nil
。在这种情况下,这是这样做的方法。
如果您确定locality
永远不会nil
,那么您可以
print(placemark.locality!)
但如果locality
恰好是nil
,那么您的应用就会在该行上崩溃。