eranseg

XML Exercise

May 13th, 2020
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 5.34 KB | None | 0 0
  1. // ------------ TableViewController.swift ------
  2.  
  3. import UIKit
  4.  
  5. class TableViewController: UITableViewController, XMLParserDelegate {
  6.    
  7.     @IBOutlet weak var currenciesTableView: UITableView!
  8.     var passName = false, passUnit = false, passCurrencyCode = false, passCountry = false, passRate = false, passChange = false
  9.     var parser = XMLParser()
  10.     var names:[String] = []
  11.     var units:[String] = []
  12.     var currCodes:[String] = []
  13.     var countries:[String] = []
  14.     var rates:[String] = []
  15.     var changes:[String] = []
  16.    
  17.     let reuseIdentifier = "CurrencyCell"
  18.    
  19.     let myUrl: String = "https://www.boi.org.il/currency.xml"
  20.  
  21.     override func viewDidLoad() {
  22.         super.viewDidLoad()
  23.         print("Load XML")
  24.        
  25.         let url: URL = URL(string: myUrl)!
  26.         parser = XMLParser(contentsOf: url)!
  27.         parser.delegate = self
  28.         let allOK: Bool = parser.parse()
  29.         if allOK {
  30.             print ("we have an xml")
  31.         } else {
  32.             print ("Error in data")
  33.         }
  34.         currenciesTableView.delegate = self
  35.         currenciesTableView.dataSource = self
  36.         //currenciesTableView.register(CurrencyTableViewCell.self, forCellReuseIdentifier: reuseIdentifier)
  37.         // Uncomment the following line to preserve selection between presentations
  38.         // self.clearsSelectionOnViewWillAppear = false
  39.  
  40.         // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
  41.         // self.navigationItem.rightBarButtonItem = self.editButtonItem
  42.     }
  43.    
  44.     func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
  45.         //check  if  we have start element
  46.         switch elementName {
  47.         case "NAME":
  48.             passName = true
  49.         case "UNIT":
  50.             passUnit = true
  51.         case "CURRENCYCODE":
  52.             passCurrencyCode = true
  53.         case "COUNTRY":
  54.             passCountry = true
  55.         case "RATE":
  56.             passRate = true
  57.         case "CHANGE":
  58.             passChange = true
  59.         default:
  60.             break
  61.         }
  62.     }
  63.    
  64.     func parser(_ parser: XMLParser, foundCharacters string: String) {
  65.         if passName{
  66.             names.append(string)
  67.         }
  68.         if  passUnit {
  69.             units.append(string)
  70.         }
  71.         if passCurrencyCode {
  72.             currCodes.append(string)
  73.         }
  74.         if passCountry {
  75.             countries.append(string)
  76.         }
  77.         if passRate {
  78.             rates.append(string)
  79.         }
  80.         if passChange {
  81.             changes.append(string)
  82.         }
  83.     }
  84.    
  85.     func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
  86.         //check  if  we have end element
  87.         switch elementName {
  88.         case "NAME":
  89.             passName = false
  90.         case "UNIT":
  91.             passUnit = false
  92.         case "CURRENCYCODE":
  93.             passCurrencyCode = false
  94.         case "COUNTRY":
  95.             passCountry = false
  96.         case "RATE":
  97.             passRate = false
  98.         case "CHANGE":
  99.             passChange = false
  100.         default:
  101.             break
  102.         }
  103.     }
  104.    
  105.     func parser(_ parser: XMLParser, parseErrorOccurred parseError: Error) {
  106.         print ("error:\(parseError)")
  107.     }
  108.  
  109.     // MARK: - Table view data source
  110.    
  111.     override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  112.         // #warning Incomplete implementation, return the number of rows
  113.         return names.count
  114.     }
  115.      
  116.    
  117.     override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  118.         let cell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier, for: indexPath) as! CurrencyTableViewCell
  119.  
  120.         cell.nameValueLabel.text = names[indexPath.row]
  121.         cell.unitValueLabel.text = units[indexPath.row]
  122.         cell.currencyCodeValueLabel.text = currCodes[indexPath.row]
  123.         cell.countryValueLabel.text = countries[indexPath.row]
  124.         cell.rateValueLabel.text = rates[indexPath.row]
  125.         cell.changeValueLabel.text = changes[indexPath.row]
  126.         if Double(changes[indexPath.row])! < 0 {
  127.             cell.backgroundColor = .red
  128.         } else {
  129.             cell.backgroundColor = .green
  130.         }
  131.  
  132.         return cell
  133.     }
  134.    
  135.     override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  136.         return 150
  137.     }
  138. }
  139.  
  140. //----------- CurrencyTableViewCell.swift -----
  141.  
  142. import UIKit
  143.  
  144. class CurrencyTableViewCell: UITableViewCell {
  145.    
  146.     @IBOutlet var nameValueLabel: UILabel! = UILabel()
  147.     @IBOutlet var unitValueLabel: UILabel! = UILabel()
  148.     @IBOutlet var currencyCodeValueLabel: UILabel! = UILabel()
  149.     @IBOutlet var countryValueLabel: UILabel! = UILabel()
  150.     @IBOutlet var rateValueLabel: UILabel! = UILabel()
  151.     @IBOutlet var changeValueLabel: UILabel! = UILabel()
  152.    
  153.     override func awakeFromNib() {
  154.         super.awakeFromNib()
  155.         // Initialization code
  156.     }
  157.  
  158.     override func setSelected(_ selected: Bool, animated: Bool) {
  159.         super.setSelected(selected, animated: animated)
  160.  
  161.         // Configure the view for the selected state
  162.     }
  163.  
  164. }
Add Comment
Please, Sign In to add comment