ios - 使用模型向下载的 MySQL 数据添加局部变量
问题描述
我正在使用 MySQL 和 PHP 下载餐厅菜单,但应用程序的用户应该能够从他们想要的菜单中添加一定数量的项目。目前我正在使用步进器来指示数量并将该数量添加到 UserDefaults 键中,该键在再次下载菜单时被调用。当我转到另一个总结订单的视图控制器时,这使我不得不再次下载菜单,但我似乎无法只过滤掉那些确实有数量的项目。
有什么更好的方法可以将该数量添加到下载的数据中,以及如何在我的购物车 ViewController 中过滤这些项目以仅显示和使用具有数量的项目。
我当前的 downloadModel、MenuModel、cellViewController(用于菜单表视图)如下所示:
菜单下载.swift:
import UIKit
protocol MenuDownloadProtocol: class {
func productsDownloaded(products: NSArray)
}
class MenuDownload: NSObject {
//properties
weak var delegate: MenuDownloadProtocol!
func downloadProducts() {
let urlPath = "http://server.com/download.php" // Fake URL obviously
let url: URL = URL(string: urlPath)!
let defaultSession = Foundation.URLSession(configuration: URLSessionConfiguration.default)
let task = defaultSession.dataTask(with: url) { (data, response, error) in
if error != nil {
print("Failed to download data")
}else {
print("Menu downloaded")
self.parseJSON(data!)
}
}
task.resume()
}
func parseJSON(_ data:Data) {
var jsonResult = NSArray()
do{
jsonResult = try JSONSerialization.jsonObject(with: data, options:JSONSerialization.ReadingOptions.allowFragments) as! NSArray
} catch let error as NSError {
print(error)
}
var jsonElement = NSDictionary()
let products = NSMutableArray()
for i in 0 ..< jsonResult.count
{
jsonElement = jsonResult[i] as! NSDictionary
let restomenu = MenuModel()
//the following insures none of the JsonElement values are nil through optional binding
if let product = jsonElement["product"] as? String,
let price = jsonElement["price"] as? String,
let info = jsonElement["info"] as? String,
let imageurl = jsonElement["imageurl"] as? String
{
let productandprice = product + " " + "€" + price
let quantityy = UserDefaults.standard.object(forKey: productandprice) as? String
restomenu.product = product
restomenu.price = price
restomenu.info = info
restomenu.imageurl = imageurl
restomenu.quantity = quantityy
}
products.add(restomenu)
}
DispatchQueue.main.async(execute: { () -> Void in
self.delegate.productsDownloaded(products: products)
})
}
}
extension String {
func chopPrefix(_ count: Int = 1) -> String {
return substring(from: index(startIndex, offsetBy: count))
}
func chopSuffix(_ count: Int = 1) -> String {
return substring(to: index(endIndex, offsetBy: -count))
}
}
MenuModel.swift:
import UIKit
class MenuModel: NSObject {
//properties
var product: String?
var price: String?
var info: String?
var imageurl: String?
var quantity: String?
//empty constructor
override init()
{
}
init(product: String, price: String, info: String, imageurl: String, quantity: String) {
self.product = product
self.price = price
self.info = info
self.imageurl = imageurl
self.quantity = quantity
}
//prints object's current state
override var description: String {
return "product: \(String(describing: product)), price: \(String(describing: price)), info: \(String(describing: info)), imageurl: \(String(describing: imageurl)), quantity: \(String(describing: quantity))"
}
}
tableViewCell.swift:
import UIKit
class productTableViewCell: UITableViewCell {
@IBOutlet weak var productLabel: UILabel!
@IBOutlet weak var productImage: UIImageView!
@IBOutlet weak var cellView: UIView!
@IBOutlet weak var orderCount: UILabel!
@IBOutlet weak var stepper: UIStepper!
var amount: String?
@IBAction func stepperValueChanged(_ sender: UIStepper) {
amount = Int(sender.value).description
orderCount.text = amount
// let defaultkey = String(productLabel.text!)
UserDefaults.standard.setValue(amount, forKey: productLabel.text!)
if amount == "0"
{
orderCount.isHidden = true
UserDefaults.standard.removeObject(forKey: productLabel.text!)
}
else
{
orderCount.isHidden = false
}
}
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
编辑:在尝试了过滤选项和许多不同的方法后,我仍然没有找到解决这个问题的方法。我觉得我想太多了。
解决方案
推荐阅读
- reactjs - 能够使用 plotly.js 在图表旁边添加 div 元素
- windows - 将 Powershell-Console 从 WinForms 带到前面
- python - Python argparse 削减了一半的论点
- r - 在 R 中整理 NES 累积数据集:下载的最佳格式是什么以及如何分离这些变量
- c# - C# '无法访问已释放的对象。对象名称:'SslStream'。
- ios - 当离开节点位置时,触摸事件不会使 spritenode 重置其大小
- android - Android - 数据库中缺少数据
- twilio - undefined:undefined Twilio Studio Flow 短信转发功能错误
- python - 从大时间范围Python中获取每分钟的股票数据
- excel - openpyxl:密码保护整个excel文件(xlsx)