【发布时间】:2020-11-04 23:35:22
【问题描述】:
在 FilterViewController 中,我有“applyButtonClicked”方法,该方法会在按钮单击时触发。在此方法中,我填写并获取要在 ViewController 文件中使用的“selectedCtgsArr”数组。
当 selectedCtgsArr 数组已被填充(applyButtonClicked 方法启动)时,如何将 selectedCtgsArr 的值从 FilterViewController 复制到 ViewController 中的 selectedCategoriesArr?
FilterViewController:
class FilterViewController: UIViewController {
var categories = [Category]()
var output = [[String : Any]]()
var selectedCtgsArr = [String]()
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var applyButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
getCategories()
}
@IBAction func applyButtonClicked(_ sender: UIButton) {
var selectedCatgry = [String]()
for i in 0..<output.count {
let rowVal = output[i]
if rowVal["status"] as! String == "1"{
selectedCatgry.append(rowVal["name"] as! String)
}
}
selectedCtgsArr = selectedCatgry
print(selectedCtgsArr) // copy this array
}
func getCategories() {
let url = URL(string: "https://www.thecocktaildb.com/api/json/v1/1/list.php?c=list")
URLSession.shared.dataTask(with: url!) { (data, response, error) in
if error == nil {
do {
self.categories = try JSONDecoder().decode(Categories.self, from: data!).drinks
for i in 0..<self.categories.count {
self.output.append(["name":self.categories[i].strCategory, "status":"1"])
}
DispatchQueue.main.async {
self.tableView.reloadData()
}
} catch {
print(error)
}
}
}.resume()
}
}
视图控制器:
class ViewController: UIViewController {
var drinks = [Drink]()
var categories = [OneCategory]()
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
loadAllCategories()
var selectedCategoriesArr: [String] = [] // copy here
}
func loadAllCategories() {
let url = URL(string: "https://www.thecocktaildb.com/api/json/v1/1/list.php?c=list")
URLSession.shared.dataTask(with: url!) { (data, response, error) in
if let error = error {
print(error)
return
}
do {
let result = try JSONSerialization.jsonObject(with: data!) as! [String:Any]
let categoryNames = (result["drinks"] as! [[String:String]]).map{$0["strCategory"]!}
let group = DispatchGroup()
for category in categoryNames {
let categoryURLString = "https://www.thecocktaildb.com/api/json/v1/1/filter.php?c=\(category)"
.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!
let categoryURL = URL(string: categoryURLString)!
group.enter()
let categoryTask = URLSession.shared.dataTask(with: categoryURL) { (categoryData, _, categoryError) in
defer {
group.leave()
}
if let categoryError = categoryError {
print(categoryError)
return
}
do {
let drinks = try JSONDecoder().decode(Response.self, from: categoryData!).drinks
self.categories.append(OneCategory(name: category, drinks: drinks))
} catch {
print(error)
}
}
categoryTask.resume()
}
group.notify(queue: .main) {
self.tableView.reloadData()
}
} catch {
print(error)
}
}.resume()
}
}
【问题讨论】:
-
如何从一个控制器导航到另一个控制器
-
告诉我们它们之间的关系。
-
在 ViewContrller 导航栏中,我有一个带有 FilterViewController 的“显示”segue 的按钮
-
i.stack.imgur.com/X6c0p.jpg@Frankenstein
-
请阅读Under what circumstances may I add “urgent” or other similar phrases to my question, in order to obtain faster answers? - 总结是这不是解决志愿者的理想方式,并且可能会适得其反。请不要将此添加到您的问题中。
标签: ios arrays swift class viewcontroller