gpt4 book ai didi

swift - 将变量从 UIImagePickerController 传递到 Swift 中的其他函数

转载 作者:搜寻专家 更新时间:2023-11-01 07:08:16 29 4
gpt4 key购买 nike

我有一个问题想弄清楚。我不确定解决这个问题的“优雅”方式是什么。这是我的第一个 Swift 项目,所以如果我问了一些荒谬的问题,请原谅。

我有这个 Controller /图像选择器来获取用户照片库中照片的纬度/经度。

//Get metadata from a photo. Save location (latitude/longitude)

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

let picker = UIImagePickerController()
picker.delegate = self // delegate added


if let URL = info[UIImagePickerControllerReferenceURL] as? URL {
print("We got the URL as \(URL)")

let opts = PHFetchOptions()
opts.fetchLimit = 1
let assets = PHAsset.fetchAssets(withALAssetURLs: [URL], options: opts)
for assetIndex in 0..<assets.count {
var asset = assets[assetIndex]
var location = String(describing: asset.location!)
var photo_latitude = asset.location?.coordinate.latitude
var photo_longitude = asset.location?.coordinate.longitude
var coords : [String: Double] = ["longitude": photo_longitude!, "latitude": photo_latitude!]
PHAsset.fetchAssets(withALAssetURLs: [URL], options: nil)
dismiss(animated:true, completion: nil)


PHImageManager.default()
.requestImageData(for: asset,
options: nil) { resultData, response, orientation, info in
var data = resultData
DropboxClientsManager
.authorizedClient?
.files
.upload(path: "/development/image.jpg", mode: .overwrite, input : data!)
print(data!)
}

}

}
}
}

我还将他们选择的图片上传到 Dropbox。

这是我的问题。我想从纬度和经度获取地址,但我需要一些方法将纬度和经度传递到适当的函数中。我将以下代码与 Google Maps API 结合使用,以根据纬度和经度查找地址。

let baseUrl = "http://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=true/false"

let apikey = "hiding_my_api_key"

func getAddressFromGoogle() {

Alamofire.request(baseUrl, method: .get).responseJSON {
response in
if response.result.isSuccess {
print("Successful request.")

var locationData = JSON(response.result.value!)
let streetAddress = locationData["results", 0, "formatted_address"]
print(streetAddress)
print(locationData)

}

else {
print("Error \(response.result.error)")

}
}

}

photo_longitudephoto_latitude 传递给我的 getAddressFromGoogle 函数的最佳方式是什么?

提前致谢。

最佳答案

解决这个问题的典型 Swift 方法是正面攻击它。纬度和经度都是 float ,您通常会这样传递它们:

func getAddressFrom(lat: Double, long: Double)

一旦进入 getAddressFrom(_:_:) 方法,您通常会使用 number formatter 的实例。将每个 Double 转换为 Google API 期望格式的 String:

func getAddressFrom(lat: Double, long: Double) {
let baseUrl = "http://maps.googleapis.com/maps/api/geocode/json?", urlSuffix = "&sensor=true/false"
let numberFormatter = NumberFormatter()
numberFormatter.maximumFractionDigits = 6
// Do other configuration to get the number formatter to produce the output you need…

let numberLat = NSNumber(floatLiteral: lat), numberLong = NSNumber(floatLiteral: long)

guard let textLat = numberFormatter.string(from: numberLat),
let textLong = numberFormatter.string(from: numberLong) else {
// Handle invalid latitude or longitude…
return
}
let completeUrl = baseUrl + textLat + "," + textLong + urlSuffix

// Remaining body of function…
}

在生产中,您可能会在类主体中配置数字格式化程序以重复用于许多图像。

查看您的图像选择器 Controller ,我看到您从图像中提取的纬度和经度是可选值,因为它们可能是也可能不是nil。调用 getAddressFrom(_:_:) 时,您可能会使用 optional binding打开选项并处理 nil 情况:

guard let photo_latitude = photo_latitude, let photo_longitude = photo_longitude else {
// Handle a photo missing latitude, longitude, or both…
return
}
getAddressFrom(lat: photo_latitude, long: photo_longitude)

请注意,在 Swift 中变量名中使用下划线并不常见。 photoLatitude 和 photoLongitude 更符合 Swift 风格。

关于swift - 将变量从 UIImagePickerController 传递到 Swift 中的其他函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46750848/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com