我在ItemsViewController.swift
中遇到代码顺序问题当我运行我的代码时,它会在我的api返回项目的值之前启动for items循环。这是在行中完成的:self.viewModel/getItemsTwo...
因此它认为在循环开始时项目为零,因此它出错:
fatal error: unexpectedly found nil while unwrapping an Optional value
只有在api调用/函数调用填充了项目后才能启动循环?
class ItemsViewController: UIViewController {
private let viewModel : ItemsViewModel = ItemsViewModel()
override func viewDidLoad() {
super.viewDidLoad()
self.viewModel.getItemsTwo(self.viewModel.getCurrentUser())
var items = self.viewModel.items
for item in items! {
print(item)
}
}
...
viewModel中的getItemsTwo函数在调用时设置viewModel.items变量
编辑1
ItemsViewModel.swift
...
var items : JSON?
...
func getItemsTwo(user: MYUser) {
let user_id = user.getUserId()
let url = String(format:"users/%@/items", user_id)
self.get(url).responseJSON { (response) -> Void in
let dataExample = response.data
var newdata = JSON(data: dataExample!)
self.items = newdata
}
}
...
编辑2
我正在尝试这样做:
只需将ViewController中的更改为:
即可var items = self.viewModel.getItemsTwo(self.viewModel.getCurrentUser())
和ViewModel:
func getItemsTwo(user: MYUser) -> JSON {
let user_id = user.getUserId()
let url = String(format:"users/%@/items", user_id)
self.get(url).responseJSON { (response) -> Void in
let dataExample = response.data
var newdata = JSON(data: dataExample!)
self.items = newdata
}
return self.items
}
但是返回语句仍然错误,就好像self.items一样。
答案 0 :(得分:1)
也许你可以扩展你的$('td').children().hide()
方法来进行回调关闭,例如:
getItemsTwo
意味着您有一个名为func getItemsTwo(user: MYUser, callback: (items: [JSON])-> Void)
的参数,它是一个闭包函数,返回callback
并将Void
个数组作为输入参数。
将JSON
添加到newdata
后,您可以像这样调用回调闭包:
self.items
然后,在你的func getItemsTwo(user: MYUser, callback: (items: [JSON])-> Void) {
let user_id = user.getUserId()
let url = String(format:"users/%@/items", user_id)
self.get(url).responseJSON { (response) -> Void in
let dataExample = response.data
var newdata = JSON(data: dataExample!)
self.items = new data
//Items are now populated, call callback
callback(items: self.items)
}
}
中你可以说:
ItemsViewController
请注意,如果你添加一个闭包作为最后一个参数,你可以使用一个所谓的“尾随闭包”并将它放在你的函数“外部”或“之后”,如“Swift编程语言”的in this chapter所述
希望对您有所帮助(我没有检查过编译器,因此您可能会遇到一些错误,但是请仔细查看它们确定:))。