【发布时间】:2017-02-22 22:28:18
【问题描述】:
好的,开始吧,这是我的代码:
import UIKit
import ForecastIO
class Weather {
var temp: Float
var condition: String
var wind: Float
var precip: Float
init() {
DarkSkyClient(apiKey: "<api key>").getForecast(latitude: Utils().getLat(), longitude: Utils().getLong()) { result in
switch result {
case .success(let currentForecast, _):
self.temp = (currentForecast.currently?.temperature)!
self.condition = (currentForecast.currently?.summary)!
self.wind = (currentForecast.currently?.windSpeed)!
self.precip = (currentForecast.currently?.precipitationProbability)!
case .failure(let error):
print(error)
}
}
}
}
所以我的错误出现了,因为我试图在 API 调用中初始化 temp。我知道这不是最可靠的方法,但我正在尝试首先让它发挥作用。
第一个错误是:
在所有成员初始化之前被闭包捕获的'self'
上线DarkSkyClient(apiKey: "").getForecast(latitude: Utils().getLat(), longitude: Utils().getLong()) { result in
我的第二个错误:
从初始化程序返回而不初始化所有存储的属性
倒数第二个}
现在,显然我没有正确初始化。我找不到正确的方法来完成我的最终目标。也许我这样做完全错了?
【问题讨论】:
-
一个对象不能异步初始化自己。您的 API 调用应该由另一个对象调用,该对象应该为您的
Weather类调用初始化程序并传入它从 API 获取的值。 -
@dan 我理解那部分,我只是不明白使用另一个对象的正确方法是什么。 (另外,感谢您的帮助)
-
你可以将你的成员变量声明为 Optionals
-
@odlund 我试过这个,但我得到了一个意想不到的零。
-
在执行异步代码之前给所有属性一些默认值。
标签: swift