Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
315
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. import UIKit
  3. import Foundation
  4.  
  5.  
  6.  
  7.  
  8. class ViewController: UIViewController, CurrencyViewControllerDelegate {
  9.     var toPass:String!
  10.                            
  11.     @IBOutlet weak var USD: UITextField!
  12.     @IBOutlet weak var BTC: UILabel!
  13.     @IBAction func BackgroundTapped(sender: AnyObject) {
  14.         USD.resignFirstResponder()
  15.         calculate()
  16.  
  17.     }
  18.     //var bitcoinPrice:Int = 0
  19.  
  20.    
  21.     @IBOutlet weak var currencySelector: UIButton!
  22.  
  23.     @IBAction func refreshedPressed(sender: AnyObject) {
  24.         update()
  25.         BTC.text = "1"
  26.     }
  27.    
  28.     override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
  29.         if (segue.identifier == "presentCurrency") {
  30.            
  31.            
  32.             var currencyVC = segue.destinationViewController as CurrencyViewController
  33.             currencyVC.delegate = self;
  34.            
  35.         }
  36.     }
  37.    
  38.     func currencyViewControllerDidSelect(value: String)  {
  39.        
  40.         currencySelector.setTitle(value, forState: UIControlState.Normal)
  41.         update()
  42.         BTC.text = "1"
  43.        
  44.         //do your stuff here
  45.     }
  46.    
  47.     struct price {
  48.         static var BTCprice: Double = 0
  49.     }
  50.  
  51.     func handler(response: NSURLResponse!, data : NSData!, error : NSError!) {
  52.        
  53.         if ((error) != nil) {
  54.             println("There was a primary error internet")
  55.            
  56.             BTCFallback()
  57.            
  58.  
  59.         } else if (NSString(data:data, encoding:NSUTF8StringEncoding)) == nil {
  60.              BTCFallback()
  61.              println("Handler chose to fallback as nil")
  62.         } else if (NSString(data:data, encoding:NSUTF8StringEncoding)) == "" {
  63.             //USD.text = "Fetching...";
  64.             println("func handler set usd to fetching" + " = true")
  65.            
  66.             BTC.text = "1.0"
  67.             println("Handler chose to fallback as blank")
  68.            
  69.             BTCFallback()
  70.  
  71.         } else {
  72.             println("Handler found no issues with: " + (NSString(data:data, encoding:NSUTF8StringEncoding))!)
  73.             setUSDText((NSString(data:data, encoding:NSUTF8StringEncoding))!, sender: "handler")
  74.             //self.USD.text = (NSString(data:data, encoding:NSUTF8StringEncoding))
  75.             println("handler called function set")
  76.             var localPrice = (NSString(data:data, encoding:NSUTF8StringEncoding))?.integerValue
  77.             var doublePrice:Double = Double(localPrice!)
  78.             price.BTCprice = doublePrice
  79.             println("Handler set price.btcprice  as " + "\(doublePrice)")
  80.  
  81.  
  82.            
  83.             }
  84.  
  85.  
  86.        
  87.     }
  88.    
  89.     func fallback(response: NSURLResponse!, data : NSData!, error : NSError!) {
  90.        
  91.         if ((error) != nil) {
  92.             println(error)
  93.             self.USD.text = "No Internet"
  94.             self.BTC.text = "No Internet"
  95.             var alert = UIAlertController(title: "API Error", message: "The BitPay API could not be reached. Either it is down, or CryptoCalc can't reach it. Ensure that your phone is connected to the internet, and that this app is not being blocked access, or try again later.", preferredStyle: UIAlertControllerStyle.Alert)
  96.             alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
  97.             self.presentViewController(alert, animated: true, completion: nil)
  98.             self.USD.text = "No Internet"
  99.             self.BTC.text = "No Internet"
  100.            
  101.            
  102.         } else {
  103.             if (NSString(data:data, encoding:NSUTF8StringEncoding) == "") {
  104.                
  105.                 self.USD.text = "API Error"
  106.                 self.BTC.text = "API Error"
  107.                
  108.                 var alert = UIAlertController(title: "API Error", message: "The BitcoinAverage Price Index didn't give a response. Either it's down, or you made too many requests and it blocked you. Only use the refresh button as needed, as it refreshes automatically. Try again later.", preferredStyle: UIAlertControllerStyle.Alert)
  109.                 alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
  110.                 self.presentViewController(alert, animated: true, completion: nil)
  111.                 self.USD.text = "API Error"
  112.                 self.BTC.text = "API Error"
  113.                
  114.                
  115.                
  116.             } else {
  117.                 var data = NSData(data: data);
  118.                 // let value = NSString(string: USD.text).doubleValue / NSString(data:data, encoding:NSUTF8StringEncoding).doubleValue!
  119.                
  120.                 // Define JSON string
  121.                 var JSONString = "\(data)"
  122.                
  123.                
  124.                
  125.                 // Get NSData using string
  126.                 if let JSONData = JSONString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) {
  127.                    
  128.                     // Parse JSONData into JSON object
  129.                     var parsingError: NSError?
  130.                     if let JSONObject = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &parsingError) as? [String: AnyObject] {
  131.                        
  132.                         // If the parsing was successful grab the rate object
  133.                         var rateObject: AnyObject? = JSONObject["rate"]
  134.                        
  135.                         // Make sure the rate object is the expected type
  136.                         if let rate = rateObject as? Double {
  137.                             println("BITPAY got " + "\(rate)")
  138.                             //self.USD.text = "\(rate)"
  139.                             setUSDText("\(rate)", sender: "fallback")
  140.                             println("Bitpay set USD.text as" + "\(rate)")
  141.                             var localPrice2 = rate
  142.                             price.BTCprice = localPrice2
  143.                             println("Bitpay set price.BTCPrice as" + "\(localPrice2)")
  144.                             BTC.text = "1.0"
  145.                         }
  146.                     } else {
  147.                        
  148.                         // There was an error parsing the JSON data
  149.                         println("Error parsing JSON: \(parsingError)")
  150.                         BTC.text = "err1"
  151.                     }
  152.  
  153.             }
  154.            
  155.            
  156.            
  157.            
  158.             // println("async fetch: " + price);
  159.             // self.USD.text = price
  160.             //  bitcoinPrice = (price).integerValue
  161.            
  162.            
  163.            
  164.             }
  165.         }
  166.     }
  167.    
  168.  
  169.    
  170.     func setUSDText(price: String, sender: String)  {
  171.         USD.text = price
  172.         USD.textAlignment = NSTextAlignment.Center
  173.         BTC.text = BTC.text
  174.        
  175.        
  176.         println("setUSDTEXT set USD.text was set as" + "\(price)" + "by " + sender)
  177.     }
  178.    
  179.     func BTCFallback(){
  180.    
  181.         var string2 = currencySelector.currentTitle
  182.    
  183.    
  184.         var url = NSURL(string:"https://bitpay.com/api/rates/" +  (string2)!)
  185.         var request = NSURLRequest(URL: url!)
  186.    
  187.    
  188.         NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue(), completionHandler:fallback)
  189.     }
  190.  
  191.  
  192.  
  193.        
  194.     // USD.text =  NSString(data:data, encoding:NSUTF8StringEncoding)
  195.     //BTC.text = "\(value)"
  196.     // println("Normal fetch!")
  197.  
  198.    
  199.    
  200.    
  201.    
  202.     override func viewDidLoad() {
  203.        
  204.        
  205.         currencySelector.setTitle("USD", forState: UIControlState.Normal)
  206.        
  207.  
  208.         super.viewDidLoad()
  209.          BTC.textAlignment = NSTextAlignment.Center
  210.        
  211.        
  212.         self.update(); //it will call update immediately
  213.  
  214.         var timer = NSTimer.scheduledTimerWithTimeInterval(120, target: self, selector: Selector("update"), userInfo: nil, repeats: true) //repeats after 2minutes
  215.  
  216.     }
  217.  
  218.     func getBTCPrice() {
  219.        /*// if (USD.text).toInt() != bitcoinPrice {
  220.         let string1 = "https://api.bitcoinaverage.com/ticker/"
  221.         var string2 = currencySelector.currentTitle
  222.        
  223.         let string3 = "/last"
  224.         println("https://api.bitcoinaverage.com/ticker/\(string2)\(string3)")
  225.         var alert = UIAlertController(title: "API Error", message: "www.api.bitcoinaverage.com/ticker/" +  (string2)! + "/last", preferredStyle: UIAlertControllerStyle.Alert)
  226.         alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
  227.         self.presentViewController(alert, animated: true, completion: nil)
  228. */
  229.         var string2 = currencySelector.currentTitle
  230.  
  231.  
  232.         var url = NSURL(string:"https://api.bitcoinaverage.com/ticker/global/" +  (string2)! + "/last")
  233.         println(url)
  234.         var request = NSURLRequest(URL: url!)
  235.        
  236.        
  237.         NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue(), completionHandler:handler)
  238.        
  239.         }
  240.    
  241.     func update() {
  242.         //USD.text = "Fetching...";
  243.         println("func update set usd to fetching" + " = true")
  244.         BTC.text = "1.0"
  245.         getBTCPrice()
  246.         USD.textAlignment = NSTextAlignment.Center
  247.         println("BTCAV")
  248.  
  249.        
  250.        
  251.     }
  252.    
  253.     func calculate() {
  254.         let value = NSString(string: USD.text).doubleValue / (price.BTCprice)
  255.         let roundedval = (round(100000000 * value) / 100000000)
  256.        
  257.         BTC.text = "\(roundedval)"
  258.         BTC.textAlignment = NSTextAlignment.Center;
  259.     }
  260.    
  261.     override func didReceiveMemoryWarning() {
  262.         super.didReceiveMemoryWarning()
  263.         // Dispose of any resources that can be recreated.
  264.     }
  265.    
  266.  
  267.  
  268.  
  269. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement