如何将闭包中的变量保存到外部变量?
Posted
技术标签:
【中文标题】如何将闭包中的变量保存到外部变量?【英文标题】:How to save variable in closure to external variable? 【发布时间】:2017-05-16 15:30:17 【问题描述】:我正在尝试创建一个自定义 PickerView,它从 API 调用获取数据到网络服务器。我遇到的问题是将解析后的数据保存到外部变量中,以便 PickerView 协议方法可以访问它。
// API Call / Parsing using Alamofire + Unbox
static func makeApiCall(completionHandler: @escaping (CustomDataStructure) -> ())
Alamofire.request(webserverUrl, method: .get).responseObject (response: DataResponse<Experiment>) in
switch response.result
case .success:
if var configParams = response.result.value
let inputConfigs = removeExtrasParams(experiment: response.result.value!)
let modifiedViewModel = modifyViewModel(experiment: &configParams, inputConfigs: inputConfigs)
completionHandler(modifiedViewModel)
case .failure(_):
break
// Custom PickerClass
class CustomPickerView: UIPickerView
fileprivate var customDS: CustomDataStructure?
override init()
super.init()
dataSource = self
delegate = self
SomeClass.makeApiCall(completionHandler: customds in
self.customDS = customds
)
...
extension CustomPickerView: UIPickerViewDelegate
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?
if let customds = customDS
if let customDSValues = customds.inputs.first?.value
return customDSValues[row]
return "apple"
extension CustomPickerView: UIPickerViewDataSource
func numberOfComponents(in pickerView: UIPickerView) -> Int
return 1
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
if let customds = customDS
return customds.inputs.values.count
else
return 0
我遇到的问题是 customDS 每次都返回 nil。
我在这里做错了什么?
【问题讨论】:
您在哪里访问 customDS? 我添加了用于访问 customDS 的代码块。 【参考方案1】:在makeApiCall
的完成块中,只需在主线程上重新加载您的pickerView's
组件,就可以开始了。
SomeClass.makeApiCall(completionHandler: customds in
self.customDS = customds
DispatchQueue.main.async
self.reloadComponent(0)
)
【讨论】:
这成功了,谢谢!出于某种原因,我认为 PickerView 使用 reloadData() 就像 TableView 使用的那样。再次感谢!以上是关于如何将闭包中的变量保存到外部变量?的主要内容,如果未能解决你的问题,请参考以下文章