Ich versuche, einen Text von einer Website in einer iPhone App zu verwenden. Dazu benutze ich einen Web-Scrapper, Osmosis. Ich habe es geschafft, die gewünschten Daten abzurufen, aber ich kann die Daten in einem Array nicht beeinflussen, um sie außerhalb der Funktion zu verwenden. Hier ist ein Ausschnitt von dem, was ich getan habe:Verwenden Sie Daten aus einem Bereich außerhalb des Gültigkeitsbereichs
class ViewController: UIViewController {
@IBOutlet weak var quote: UILabel!
private var array: [[String: AnyObject]] = []
var initArray: [[String: AnyObject]] {
get {
return array
}
set {
for e in self.initArray {
array.append(e)
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
getQuotes()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func getQuotes()
Osmosis(errorHandler: { (error) -> Void in
print(error)
})
.get(NSURL(string: "http://www.example.com")!)
.find(OsmosisSelector(selector: ".parentDiv"), type: .CSS)
.populate([
OsmosisPopulateKey.Single("quotes") : OsmosisSelector(selector: ".childDiv")
], type: .CSS)
.list { (dict) -> Void in
self.array.append(dict)
print(self.initArray) // this prints data
}
.start()
print(self.initArray) // This prints an empty array
}
}
Ich glaube, ich nicht das Array verwenden kann, weil es in der init von Osmosis()
gefüllt ist, aber ich frage mich, wie es in meinem Code irgendwo anders zu verwenden. Können Sie mir bitte erklären, was in meinem Code passiert (warum kann ich die Daten nur in .list()
verwenden) und wie behebe ich das?
Edit: Ich habe versucht, einen Getter und einen Setter, um zu verwenden, um meine Daten außerhalb des Bereichs abzurufen, aber das Ergebnis ist das gleiche, als wenn es kein Getter/Setter waren.
Ich weiß, dass mein Titel überhaupt nicht explizit ist, aber ich habe keine Ahnung, wie ich genauer sein könnte. Wenn Sie einen besseren Titel finden, ändern Sie ihn bitte. Prost – Mehdi
Ein Problem ist, dass Ihr 'Array' vom Typ' [[String: AnyObject]] '' ist und Ihr 'quotesArray' vom selben Typ ist, aber Sie versuchen,' array' an 'quotesArray' anzuhängen: es kann arbeite nicht. Wenn Sie ein Array von Dictionaries an ein neues Container-Array anfügen möchten, sollte dieser Container den Typ '[[[String: AnyObject]]]] haben, aber ich bin mir nicht sicher, ob Sie das wirklich tun möchten ... – Moritz
Ein weiteres Problem ist, dass 'print (self.array)' * außerhalb des Umfangs der Osmosis-Schließung * liegt, so dass Sie es betrachten, während es noch nicht * gefüllt * ist, also denken Sie, es ist leer. Setzen Sie 'print (self.array)' innerhalb des '.list' Blocks, direkt vor der schließenden Klammer, in die leere Zeile. – Moritz