Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用范围之外的范围中的数据_Ios_Arrays_Swift - Fatal编程技术网

Ios 使用范围之外的范围中的数据

Ios 使用范围之外的范围中的数据,ios,arrays,swift,Ios,Arrays,Swift,我试图在iPhone应用程序中使用来自网站的文本。为此,我使用了一个网页刮板。我设法检索了我想要的数据,但我不能影响数组中的数据,以便在函数之外使用它。以下是我所做工作的一个片段: 我想我不能使用数组,因为它是在渗透()的init中填充的,但是我想知道如何在我的代码中的其他地方使用它。您能解释一下我的代码中发生了什么(为什么我只能在.list()中使用数据)以及如何解决这个问题吗 编辑: 我尝试使用getter和setter来检索范围外的数据,但结果与没有getter/setter时相同。是否

我试图在iPhone应用程序中使用来自网站的文本。为此,我使用了一个网页刮板。我设法检索了我想要的数据,但我不能影响数组中的数据,以便在函数之外使用它。以下是我所做工作的一个片段:

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

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

是否要将一个数组的所有元素添加到另一个数组

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


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

以下是我所做的:


谢谢你的帮助

我知道我的标题一点也不明确,但我不知道如何更准确。如果你找到一个更好的标题,请继续并更改它。Cheers您遇到的一个问题是,您的
数组
属于
[[String:AnyObject]]
类型,而
quotesArray
属于同一类型,但您尝试将
数组
附加到
quotesArray
:它无法工作。如果要将字典数组附加到新的容器数组,则此容器的类型应为
[[[String:AnyObject]]]
,但我不确定这是否真的是您想要做的…另一个问题是
打印(self.array)
不在渗透关闭的范围内,因此您在查看它时,它尚未填充,因此您认为它是空的。将
print(self.array)
放在
.list
块中,就在右大括号前面的空行中。谢谢您的回答@EricD。我知道在作用域内打印我的数组会起作用,但我的目标是使用作用域外的数据。我试图将QuoteArray的类型更改为
[[[String:AnyObject]]]
,但当我打印它时,它会打印一个空数组……我确实想将
数组的元素添加到
QuoteArray
。我尝试了这两种解决方案,但它打印了一个空数组…你确定你的api不是异步的吗?您是否在追加之后添加了打印?我猜api是异步的,我打印的内容超出了范围,因为我希望我的数据在任何地方都可用。您必须在计算完成后放置所有依赖于计算结果的逻辑。打印是否必须在内部。列表通过在计算完成后放置逻辑,您的意思是我必须在范围之外填充数组?如果这是你的意思,我试着这么做,但它返回一个空数组。
for e in quotesArray {
    self.array.append(e)
}
self.array.appendContentsOf(quotesArray)
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()
    }
}