来自API的位置问题

时间:2017-04-26 16:48:55

标签: ios swift3 ios10 core-location

我在尝试从api

获取坐标时遇到了问题

我正在尝试创建一个包含我所有URL的常量类,之后我创建另一个名为location的类包括两个变量纬度和经度,我创建一个函数来获取主控制中的lat和long并将其保存到location class所以我可以在常量类的URL中使用它

问题是如果我尝试打印纬度和经度的坐标 从它在输出中正确显示的函数,但是当我尝试在常量类中使用时,它显示nil

我的常数等级

import Foundation
 import Alamofire

 let Base_Url = "http://api.openweathermap.org/data/2.5/weather?"
  let lats = "lat="
  let lons = "&lon="
  let AppId = "&appid=951191ec976939570dc1aa8e0b5ed6bd"
  var lat = locationClass.sharedinstance.lat
   var lon = locationClass.sharedinstance.lon
    let CurrentWeatherUrl = "\(Base_Url)\(lats)37.785834000000001\(lons)-122.406417\(AppId)"

   let FourCastWeatherUrl = "http://api.openweathermap.org/data/2.5/forecast/daily?lat=21.5169444&lon=39.2191667&cnt=10&appid=951191ec976939570dc1aa8e0b5ed6bd"

  typealias DownloadCompleted = () -> ()

位置等级

import CoreLocation

  class locationClass {
static var sharedinstance = locationClass()
private init () {}
var lat: Double!
var lon: Double!
   }

获取纬度和经度的功能

func currentLocationAuth(){
    if CLLocationManager.authorizationStatus() == .authorizedWhenInUse{
        currentlocation = locationmanager.location
        locationClass.sharedinstance.lat = currentlocation.coordinate.latitude
        locationClass.sharedinstance.lon = currentlocation.coordinate.longitude
        print(locationClass.sharedinstance.lat,locationClass.sharedinstance.lon)
    }else{
        locationmanager.requestWhenInUseAuthorization()
            currentLocationAuth()
    }

为什么当我尝试打印主控制显示的值时,但是当我尝试在常量类中显示为空时

1 个答案:

答案 0 :(得分:1)

  1. 我不太确定你的常规类是什么意思......但是函数或init方法必须触发/初始化这些常量。如果发生之前你的单例locationClass被加载到内存中,那么显然你会得到nil

  2. 所以建议只需在输入你的long / lat之前调用:locationClass.sharedinstance,这样就会初始化你的单例。

  3. 此外,在Swift 3中,惯例是简单地使用' shared'并避免使用' sharedInstance'