首页 > 解决方案 > 将异步数据发送到 UIPickerViewDelegate 的问题

问题描述

我正在尝试发送使用从文件下载和一些解析中异步接收的一些数据,

func getMachineName(completion: @escaping (String) -> Void ) {
    let machineNumberData = self.advertData[CBAdvertisementDataManufacturerDataKey]
    if machineNumberData != nil {
        if let data = machineNumberData as? Data {
            // use `data` for the bytes
            let hexData = data.hexEncodedString()
            // range
            let number = String(hexData[hexData.index(hexData.startIndex, offsetBy: 12)...hexData.index(hexData.startIndex, offsetBy: 15)])
            let machineNumberHex =  machineNumberHexToDecimal(machineNumberHex: number)
            getMachineNameFromMachineNumber(machineNumber: machineNumberHex) { (machineName) in
                print("machine name from main: \(machineName)")
                completion(machineName)
            }
        } else {
            NSLog("Error parsing Machine number")
        }
    }
}

然后我从闭包中获取数据并尝试将其传递给pickerView

private func _pv(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String {
    
    let dev = self.pickerDevices[row]
    let id = dev.internalUUID
    guard let name = dev.name
    else {
        return "\(id)"
    }
    dev.adData.getMachineName { (mName) in
        print("machine name from wbmanager: \(mName)")
        // Problem -> Unexpected non-void return value in void function
         return "\(mName)"
    }
    
    // Problem -> Cannot find 'mName' in scope
    return "\(name) \(mName)"
}

 public func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    return self._pv(pickerView, titleForRow: row, forComponent: component)
}

但是我无法访问闭包之外的数据以将其发送到pickerview。

任何帮助,将不胜感激!

标签: iosswift

解决方案


推荐阅读