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