2017-04-03 49 views
0

我幾乎是Swift的初學者,我試圖傳遞一個值來調用一個API,其值是來自輸入字段。 該API在下面給出。如何編寫代碼以從文本字段傳遞ZIP_CODE的值?如何在Swift中將值傳遞給API?

https://iaspub.epa.gov/enviro/efservice/getEnvirofactsUVDAILY/ZIP/ZIP_CODE/JSON

@IBOutlet var zipLabel: UILabel! 
@IBOutlet var zipInput: UITextField! 
@IBOutlet var jsondataLabel: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    getJSON()  
} 

@IBAction func btnAction() { 
    zipLabel.text = zipInput.text 
} 

func getJSON(){ 
    let url = NSURL(string :"https://iaspub.epa.gov/enviro/efservice/getEnvirofactsUVDAILY/ZIP/10001/JSON") 
    let request = URLRequest(url: url as! URL) 
    let config = URLSessionConfiguration.default 
    let session = URLSession(configuration: config) 

    let task = session.dataTask(with: request){(data, response, error) -> Void in 
     if error == nil{ 
      DispatchQueue.main.async(execute: { 
       let jsondata = JSON(data : data!) 

       print(jsondata) 
       print("-----") 
       print(jsondata[0]["UV_INDEX"]) 

       let result = jsondata[0]["UV_INDEX"].stringValue 

       self.jsondataLabel.text = result 
      }) 
     }else{ 
      print("There was an error")  
     } 
    } 
    task.resume() 
} 
+0

你可以通過這個鏈接.http://stackoverflow.com/questions/31937686/how-to-make-http-post-request-with-json-body-in-swift –

+0

我已經添加了我的代碼。我得到的數據,但它是靜態的,因爲我已經手動定義郵編,我想從文本字段的數據。你能幫我解決這個問題嗎? – Vignesh

+0

試試這個http://stackoverflow.com/questions/36910463/send-post-variables-to-my-api/36910697#36910697 –

回答

1
func getJSON(_ zipcode : Int){ 



      let url = NSURL(string :"https://iaspub.epa.gov/enviro/efservice/getEnvirofactsUVDAILY/ZIP/\(zipcode)/JSON") 

      let request = URLRequest(url: url as! URL) 

      let config = URLSessionConfiguration.default 

      let session = URLSession(configuration: config) 



      let task = session.dataTask(with: request){(data, response, error) -> Void in 

       if error == nil{ 

        DispatchQueue.main.async(execute: { 

         let jsondata = JSON(data : data!) 

         print(jsondata) 

         print("-----") 

         print(jsondata[0]["UV_INDEX"]) 

         let result = jsondata[0]["UV_INDEX"].stringValue 

         self.jsondataLabel.text = result 
        }) 

       }else{ 

        print("There was an error")  
       } 

      } 
      task.resume() 
    } 
+0

您能否告訴我如何將文本字段中的數據傳遞到此函數中?我知道這是一個非常基本的問題,但我不知道如何解決這個問題。 – Vignesh

+0

getJson(Int(textfield.text!)) –

+0

因爲textfield.text返回字符串,我們想在基金中傳遞int,所以我們需要將字符串轉換爲整型 –

0

如果你的API爲您提供了GET請求,你可以使用下面的代碼的響應 -

@IBOutlet var zipLabel: UILabel! 
@IBOutlet var zipInput: UITextField! 
@IBOutlet var jsondataLabel: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 

} 

@IBAction func btnAction() { 
    zipLabel.text = zipInput.text 
    getJSON(zipcode: zipInput.text) 
} 

func getJSON(zipcode: String){ 
    let url = NSURL(string :"https://iaspub.epa.gov/enviro/efservice/getEnvirofactsUVDAILY/ZIP/10001/JSON&zipcode="+zipcode) 
    let request = URLRequest(url: url as! URL) 
    let config = URLSessionConfiguration.default 
    let session = URLSession(configuration: config) 

    let task = session.dataTask(with: request){(data, response, error) -> Void in 
     if error == nil{ 
      DispatchQueue.main.async(execute: { 
       let jsondata = JSON(data : data!) 

       print(jsondata) 
       print("-----") 
       print(jsondata[0]["UV_INDEX"]) 

       let result = jsondata[0]["UV_INDEX"].stringValue 

       self.jsondataLabel.text = result 
      }) 
     }else{ 
      print("There was an error")  
     } 
    } 
    task.resume() 
} 

但是請注意,該代碼將無法正常工作,如果你的API給你POST請求的響應。