Как передать данные в обработчик завершения - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь передать квитанцию ​​IAP на completion handler, который содержит пользователя и хотел бы проверить, активен ли в данный момент пользователь subscription, позвонив по этому номеру другого class, который я получаю.Как я могу решить это.

Невозможно вызвать значение нефункционального типа '((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)
    }
}

1 Ответ

0 голосов
/ 06 февраля 2019

Вы можете использовать typealias, чтобы сделать ваше объявление функции немного чище.И посмотрите, как был сделан блок завершения.

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