2017-05-30 41 views
-5

此功能会将照片上传到存储桶,然后在文本字段中显示该照片的直接链接。我想要做的就是缩短链接,所以我使用alamofire创建了一个对Google的URL缩短器的发布请求,并且它工作正常,但我不知道如何在文本框中显示它。以JSON的响应并在textField中显示

下面是函数

func ImageDownloader(){ 


    UIApplication.shared.isNetworkActivityIndicatorVisible = true 

    let imageContained = viewimage.image 

    let storage = Storage.storage() 
    var storageRef = storage.reference() 
    storageRef = storage.reference(forURL: "") // Link to bucket 

    var data = NSData() 
    data = UIImageJPEGRepresentation(imageContained!, 0.8)! as NSData 
    let dateFormat = DateFormatter() 
    dateFormat.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ" 
    let imageName = dateFormat.string(from: NSDate() as Date) 
    let imagePath = "images/\(imageName).jpg" 
    let metaData = StorageMetadata() 
    let mountainsRef = storageRef.child(imagePath).putData(data as Data, metadata: metaData){(metaData,error) in 
     if let error = error { 
      print(error.localizedDescription) 
      return 
     }else{ 
      //store downloadURL 
      let downloadURL = metaData!.downloadURL()!.absoluteString 
      self.getLink.text = downloadURL 



       struct dlink { 
        let longLink: String 
       } 
       let v = dlink(longLink: "\(downloadURL)") 

       let parameters = ["longUrl":"\(v.longLink)","MYURL":""] 

       Alamofire.request("https://www.googleapis.com/urlshortener/v1/url?key=MY_KEY", method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON { response in 
        print(response) 
       } 


      } 
     metaData?.contentType = "image/jpeg" 
     } 

,这里是表明它正常工作JSON响应。

enter image description here

任何形式的帮助,将不胜感激!

回答

1

您需要访问result.valueresponse以获得序列号为JSON的响应。

Alamofire.request("https://www.googleapis.com/urlshortener/v1/url?key=MY_KEY", method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON { response in 
    if let dictionary = response.result.value as? [String:Any] { 
     //Now subscript on dictionary with keys to get your values. 
     let id = dictionary["id"] as? String ?? "DefaultValue" //set default value that you want 
     let kind = dictionary["kind"] as? String ?? "DV" 
     let longUrl = dictionary["longUrl"] as? String ?? "DV" 
     print(id, kind, longUrl) 
    } 
} 

可以检查Alamofire文档Response Handling部分,以获得更多的想法。

+0

它工作!非常感谢,我真的很感激:) –

0

您将需要使用JSONSerialization分析数据:

let text = "{\"id\":\"https://link.right.here/\"}" 

do { 
    let json = try JSONSerialization.jsonObject(with: text.data(using: .ascii)!, options: []) as! [String: Any] 
    let id = json["id"] as? String 
    print(id) 
} catch { 
    print("Json parse failure") 
    fatalError() 
} 

(不要忘了在全球挽救id变量,或做/ catch语句的至少外)

然后您将需要访问正在更改的文本框。要做到这一点,你应该为故事板中连接到视图控制器的文本框创建一个插口。我不会去探讨这个问题,因为这不是你的问题所要求的,因为这里有很多关于它的教程。关键工作是出路。

假设出口名称为myTextfield,只需例如,你的代码应该是这样的:

self.myTextfield.text = "\(id)" 

其中id是在代码的第一部分设置变量。

+0

谢谢你的解释。有一件事我不明白。在常量文本中包含一个链接应该在那里插入什么链接? –

+0

我写了伪数据为JSON,使用你的JSON代替 –