使用范围之外的范围内的数据

时间:2016-03-22 10:13:07

标签: ios arrays swift

我正在尝试使用iPhone应用中的网站上的文字。为此,我使用网络剪贴簿Osmosis。我设法检索我想要的数据但我不能影响到数组的数据,以便在函数之外使用它。这是我所做的一小部分:

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
    }
}

我想我不能使用数组,因为它填充在Osmosis()的init中,但我想知道如何在我的代码中的其他地方使用它。你能解释我的代码中发生了什么(为什么我只能在.list()中使用数据)以及如何解决这个问题。

修改 我尝试使用getter和setter来检索范围之外的数据,但结果与没有getter / setter的结果相同。

2 个答案:

答案 0 :(得分:0)

您想将一个数组的所有元素添加到另一个数组吗?

for e in quotesArray {
    self.array.append(e)
}

self.array.appendContentsOf(quotesArray)

答案 1 :(得分:0)

根据Christian Dietrich的回答和评论,我设法通过更新我的范围内的UI来解决我的问题。

这就是我的所作所为:

import UIKit
import Osmosis

class ViewController: UIViewController {

    @IBOutlet weak var quote: UILabel!

    var array: [[String: AnyObject]] = []

    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() {

        var updateText: String = ""

        Osmosis(errorHandler: { (error) -> Void in
            print(error)
        })
            .get(NSURL(string: "http://www.exemple.com")!)
            .find(OsmosisSelector(selector: ".wrapper"), type: .CSS)
            .populate([
                OsmosisPopulateKey.Single("div") : OsmosisSelector(selector: ".div")
                ], type: .CSS)
            .list { (dict) -> Void in
                self.array.append(dict)
                updateText = self.array[0]["div"] as! String
                self.quote.text = updateText
                self.view.setNeedsDisplay()
            }
            .start()
    }
}

感谢您的帮助!