此功能会将照片上传到存储桶,然后在文本字段中显示指向该照片的直接链接。我想做的是缩短链接,所以我使用alamofire创建了一个帖子请求谷歌的URL缩短器,它有效,但我不知道如何显示它文本域。
这是函数
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响应,显示它工作正常。
任何形式的帮助都将不胜感激!
答案 0 :(得分:1)
您需要访问result.value
response
来获取序列化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
部分以获取更多信息。
答案 1 :(得分: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
变量,或者至少在do / catch语句之外保存
然后您需要访问正在更改的文本字段。为此,您应该在故事板中为连接到视图控制器的文本字段创建一个插座。我不会进入这个,因为它不是你的问题所要求的,因为有很多关于它的教程。关键工作是出口。
假设插座的名称为myTextfield
,例如,您的代码应如下所示:
self.myTextfield.text = "\(id)"
其中id
是在代码的第一部分中设置的变量。