簡體   English   中英

如何在完成處理程序中傳遞數據

[英]How to pass data in completion handler

我正在嘗試將IAP收據傳遞給包含用戶的completion handler ,並想通過在我得到的其他一些class調用它來檢查用戶subscription是否當前處於活動狀態。 我該如何解決。

無法調用非功能類型'((Student)-> Void)嗎?'

func validateReceipt(pReceiptData: Data? = nil, completion pCompletion: ((Student) -> Void)? = nil) {
    let receiptData = pReceiptData!.base64EncodedString()
    let receiptDict: [String: Any] = ["receipt-data": receiptData]
    do {
        let data = try JSONSerialization.data(withJSONObject: receiptDict)
        guard let validationUrl = URL(string: "https://us-central1-myApp-a8e27.cloudfunctions.net/receiptValidation") else { return }
        let session = URLSession(configuration: .default)
        var request = URLRequest(url: validationUrl, cachePolicy: .reloadIgnoringLocalCacheData)
        request.httpMethod = "POST"
        request.httpBody = data
        let task = session.uploadTask(with:request, from: data) { (data, response, error) in
            guard let data = data, error == nil else { return }
            do {
                let receipt = try IAPReceipt.decode(data: data)
                pCompletion(receipt)

            } catch let error {
                print(error.localizedDescription)
            }
        }
        task.resume()
    } catch let error {
        print(error)
    }
}

您可以使用typealias來使函數聲明更typealias 看看完成塊是如何制作的。

typealias Completion = ((_ student: Student) -> Void)?
func validateReceipt(pReceiptData: Data? = nil, completion: Completion = nil) {
      ...  
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM