我是Swift 3.x程序员的新手,我正在尝试将AppleScript程序转换为Swift,使用Cocoa(iMac桌面)中的WebKit从网站上删除数据。 VCgetInputByTag函数查找html标记(theTag),并假设返回该标记的文本。当我尝试使用此函数时,print(" text =(response)")显示我想要的数据,但是我无法获得函数VCgetInputByTag来返回该字符串。请指教。
func VCgetInputByTag(theTag:String,num:Int) - >字符串{
var webTagText : String
webTagText = ""
webView.evaluateJavaScript("document.getElementsByTagName('\(theTag)')[\(num)].innerHTML;") {(response:Any?, error:Error?) in
if (response != nil) {
webTagText = response as! String
webTagText = "\(response)"
print("text= \(response)")
}
// error handling
}
print(webTagText)
return webTagText
}
我使用和使用的AppleScript版本是
到getInputByTag(theTag,num) - 定义一个带有两个输入的函数,标签和数字
tell application "Safari" --tells AS that we are going to use Safari
set input to do JavaScript "document.getElementsByTagName('" & theTag & "')[" & num & "].innerHTML;" in document 1
end tell
return input
结束getInputByTag
感谢所有人提前帮助。
答案 0 :(得分:0)
evaluateJavaScript
函数是异步的,因此您无法同步从VCgetInputByTag
函数返回结果字符串。你需要的是一个完成处理程序来异步返回结果。
func VCgetInputByTag(theTag : String, num : Int, completionHandler:@escaping (_ result:String)->Void){
webView.evaluateJavaScript("document.getElementsByTagName('\(theTag)')[\(num)].innerHTML;") {(response:Any?, error:Error?) in
if let result = response as? String{
print("text= \(response)")
completionHandler(result)
}
// error handling
}
}