Быстрый ответ на запрос Alamofire для VC с UIWebView - PullRequest
0 голосов
/ 07 мая 2018

Я получаю ответ от Alamofire запроса, и я хочу передать его в другом UIViewController с UIWebView

{
 "result":{

    "code":"0",
    "description":""
},
 "operation":[{

    "status":boolean,
    "paymentType":integer,
    "orderID":integer",
    "paymentData":"string",
    "token":"string",
    "user":[{
    "user_status":"string",
    "userID":integer,
}]
}]
}

и в paymentData получите строку, подобную этой:

<form action="https:..." method="post">
    <input name=".." value=".." type="hidden"/>
    <input name=".." value=".." type="hidden"/>
    <input name=".." value=".." type="hidden">
    <input name=".." value="nil" type="hidden"/>
    <input name=".." value=".." type="hidden"/>
    <input name=".." value=".." type="hidden"/>
    <input name=".." value=".." type="hidden">
    <input type=".." value="PPP" style="background: #3aaf42; border: none; color: #fff; text-align: center; width: 100px; padding: 5px; margin: -15px 0 0 -50px; display: block; top: 50%; border-radius: 3px; position: absolute; left: 50%;\"/>
</form>

В ViewController с UIWebView, куда я хочу передать данные оплаты, которые у меня есть:

var paymentDat = ""

override func viewDidLoad() {
        super.viewDidLoad()
        let htmlDat = paymentDat
 webView.loadHTMLString(htmlDat, baseURL: nil)
}

На первый взгляд я ловлю данные оплаты в Alamofire следующим образом:

       Alamofire.request("http://...", method: .get, parameters: params).responseJSON { response in
        if let r = response.result.value as? NSDictionary {
            let jsss = JSON(r)

            if let result = r.value(forKey: "result") as? NSDictionary {
                if let nass = result.value(forKey: "description") as? String {
  //                        print(response.result.value)

                    if let code = result.value(forKey: "code") as? String {
         //               print(code)

                        if code == "0" {
                            if let orderIDD = jsss["operation"].array![0]["orderID"].int {
    //                                    print("order--------------------- \(orderIDD)")
                                self.webb?.orderID = orderIDD
                            }
                            if let paymentData = jsss["operation"].array![0]["paymentData"].string {
   //                                    print(paymentData)
                                self.webb?.paymentDat = paymentData

                            }
                            if paymentType == 1 {
                                self.performSegue(withIdentifier: "WebView", sender: self)
                                self.alert(title: "ОК!", message: nass)

                            } else {
                                self.alert(title: "ОК!", message: nass)

                            }
                        } else {
                            self.alert(title: "Error!", message: nass)
                        }
                    }
                }
            }
        } else {
            self.alert(title: "Error connect!", message: "Error connect")
        }
    }

Как отобразить paymentData в другом VC?

1 Ответ

0 голосов
/ 07 мая 2018

Вам необходимо установить значение в методе prepare(for segue: UIStoryboardSegue, sender: Any?).

Добавьте этот метод в ваш первый ViewController:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == "WebView", let webView = segue.destination as? WebViewController {
        webView.paymentDat = sender as! String
    }
}

Добавьте эти изменения в свой код ответа:

   Alamofire.request("http://...", method: .get, parameters: params).responseJSON { response in
    if let r = response.result.value as? NSDictionary {
        let jsss = JSON(r)

        if let result = r.value(forKey: "result") as? NSDictionary {
            if let nass = result.value(forKey: "description") as? String {
  //                        print(response.result.value)

                if let code = result.value(forKey: "code") as? String {
     //               print(code)

                    if code == "0" {
                        var paymentHTML = ""
                        if let orderIDD = jsss["operation"].array![0]["orderID"].int {
//                                    print("order--------------------- \(orderIDD)")
                            self.webb?.orderID = orderIDD
                        }
                        if let paymentData = jsss["operation"].array![0]["paymentData"].string {
   //                                    print(paymentData)
                            paymentHTML = paymentData

                        }
                        if paymentType == 1 {
                            self.performSegue(withIdentifier: "WebView", sender: paymentHTML) // Pass 
                            self.alert(title: "ОК!", message: nass)

                        } else {
                            self.alert(title: "ОК!", message: nass)

                        }
                    } else {
                        self.alert(title: "Error!", message: nass)
                    }
                }
            }
        }
    } else {
        self.alert(title: "Error connect!", message: "Error connect")
    }
}
...