UIWebview/WKWebView javascript调用处理两个返回值?

UIWebview/WKWebView javascript调用处理两个返回值?,javascript,ios,swift3,uiwebview,wkwebview,Javascript,Ios,Swift3,Uiwebview,Wkwebview,我有一个返回多个值的javascript函数。我正在尝试使用Webview在iOS应用程序中调用该函数。我试图寻找类似的问题,但什么也没找到。检查下面的代码。仅供参考,单一返回值工作正常,我在调用“webview确实完成”委托后调用此javascript //Javascript function function listABCs() constant returns (uint noOfABCs, address[] retABCAddresses) { return (abcAdd

我有一个返回多个值的javascript函数。我正在尝试使用Webview在iOS应用程序中调用该函数。我试图寻找类似的问题,但什么也没找到。检查下面的代码。仅供参考,单一返回值工作正常,我在调用“webview确实完成”委托后调用此javascript

//Javascript function
function listABCs() constant returns (uint noOfABCs, address[] retABCAddresses) {
    return (abcAddresses.length, abcAddresses);
}

//iOS code
let script = "getAbcList()"
wkWebView?.evaluateJavaScript(script, completionHandler: { (response: Any?, error:Error?) in
       print("\n Error \(String(describing: error))")
       let res = response as? String
       print("Response = \(String(describing: response))")
})

提前感谢。

您可以在第一次收到值并将其设置为true后添加布尔值

//Create a variable received response
var receivedResponse = false

let script = "getKycList()"
wkWebView?.evaluateJavaScript(script, completionHandler: { (response: Any?, error:Error?) in
   print("\n Error \(String(describing: error))")
   if !receivedResponse {
      if let res = response as? String {
          // use the response now
          print("Response = \(res)")

         // set the receivedResponse to true
         receivedResponse = true
      }

   }

})

我通过返回一个字典而不是字符串来解决这个问题,然后在iOS中使用字典来检索值

Javascript代码:

function customDictFrom(val1, val2) {

    var data_to_pass = {
        'val1': val1,
        'val2': val2
    };

    return data_to_pass;
}

function listABCs() constant returns (uint noOfABCs, address[] retABCAddresses) {
    var data_to_pass = customDictFrom(abcAddresses.length, abcAddresses);
    return data_to_pass;
}
快速(本地)处理:

let script = "getAbcList()"
wkWebView?.evaluateJavaScript(script, completionHandler: { (response: Any?, error:Error?) in
       print("\n Error \(String(describing: error))")
       let res = response as? [String: Any] //Your response is here as a dictionary
       print("Response = \(String(describing: response))")
})

希望这有帮助。

我想在单独的对象中获取两个返回值并使用它们。这不管用。你可以发布一些javascript示例,看看你想返回什么吗。我认为在这种情况下,javascript函数应该返回一个数组,这样就可以从已经添加到问题中的arrayjavascript函数中获取值。除了数组,还有其他方法可以获得多个值吗?谢谢你的回复,但我向服务器团队建议了相同的方法,但他们想要的是不同的值,而不是字典中的值。你的方法是正确的,但这不是我想要的。他们可以调用一个方法,你如何使用该方法以及如何将其发送到本机层取决于你。服务员不需要知道。