我无法将输出发布到标签上。我必须把它变成一个字符串?它似乎给我的错误是“不能下标一个类型为JiNode的值?带有'Int'类型的索引”请帮忙!
var meter = ""
@IBAction func calculate(sender: AnyObject) {
print("start scraping...")
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
let url = NSURL(string: "http://uberestimate.com/costs.php")
let jiDoc = Ji(htmlURL: url!)
if jiDoc != nil {
print("html retrived.\n")
self.scrapeHTML(jiDoc!)
}
}
}
@IBOutlet weak var resultLabel: UILabel!
@IBOutlet weak var endingPoint: UITextField!
@IBOutlet weak var startingpoint: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
private func scrapeHTML(jiDoc: Ji) {
println("parsing...\n")
let bodyNode = jiDoc.xPath("//body")!.first!
var contentDivNode = bodyNode.xPath("//span[@style='font-size:1.3em']").first
if contentDivNode == nil {
print("unexpected format!")
}else{
var cdnArray = contentDivNode[1]
var cdn = cdnArray[0]! as String
self.resultLabel.text = cdn
// println(contentDivNode)
}
return
}
}
答案 0 :(得分:0)
您可以执行以下操作:
@IBAction func calculate(sender: AnyObject) {
print("start scraping...")
let url = NSURL(string: "http://uberestimate.com/costs.php")
let task = NSURLSession.sharedSession().dataTaskWithURL(url!) { data, response, error in
if data == nil || error != nil { // in Swift 2, I'd use `guard`, but I tried to keep this backward compatible
print(error)
return
}
dispatch_async(dispatch_get_main_queue()) {
self.scrapeHTML(data!)
}
}
task.resume()
}
private func scrapeHTML(data: NSData) {
print("parsing...\n")
let jiDoc = Ji(data: data, isXML: false)
if let contentDivNode = jiDoc?.xPath("//span[@style='font-size:1.3em']")?.first {
self.resultLabel.text = contentDivNode.content
}
}
我正在使用Swift 2.1(我从println
的存在推断你必须使用早期版本),但我认为无论Swift版本如何,这都基本相同。
BTW,请注意我将标签的更新发送回主队列(正如您从全局队列调用scrapeHTML
,但UI更新必须在主线程上发生)。我也使用NSURLSession
而不是将同步网络请求分派给全局队列。