2017-05-30 7 views
-5

この機能は写真をバケットにアップロードし、その写真への直接リンクをテキストフィールドに表示します。私がしたかったのはリンクを短くすることだったので、私はalamofireを使ってGoogleのURL短縮機能への投稿リクエストを作成しました。それはうまくいきましたが、テキストフィールドに表示する方法はわかりません。JSONのレスポンスをテキストフィールドに表示

はここで機能

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

シリアル番号JSONの応答を得るには、result.valueresponseにアクセスする必要があります。

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文をしないでください)

その後変更されているテキストフィールドにアクセスする必要があります。これを行うには、View Controllerに接続するストーリーボードのテキストフィールドのアウトレットを作成する必要があります。私はあなたの質問が求めているものではなく、そこに多くのチュートリアルがあるので、これには入りません。重要な作業はアウトレットです。コンセントの名前を仮定し

myTextfieldで、単純に例えば、あなたのコードは次のようになります。

idは、コードの最初の部分で設定された変数である
self.myTextfield.text = "\(id)" 

+0

ありがとうございます。私が理解できなかったことが1つあります。定数テキストには、そこに挿入する必要があるリンクは何ですか? –

+0

私はJSONとして擬似データを書きましたが、代わりにJSONを使用してください –

関連する問題