关于在 Swift 4 中返回 CGFloat 值
Posted
技术标签:
【中文标题】关于在 Swift 4 中返回 CGFloat 值【英文标题】:About return CGFloat value in Swift 4 【发布时间】:2018-10-26 01:12:07 【问题描述】:下载图片后,我创建了一个返回图片垂直值的函数。
但是,图像的垂直值将失败并返回 CGFloat 值。
此源代码下载后返回。
extension HomeViewController : PinterestLayoutDelegate
func collectionView(_ collectionView: UICollectionView, heightForPhotoAtIndexPath indexPath:IndexPath) -> CGFloat
let arts = self.artList
let model = arts![indexPath.row]
let urlString = model.url!
let urll = NSURL(string: urlString)
return downloadImage(from: urll! as URL)
extension HomeViewController
func getData(from url: URL, completion: @escaping (Data?, URLResponse?, Error?) -> ())
URLSession.shared.dataTask(with: url, completionHandler: completion).resume()
func downloadImage(from url: URL) -> CGFloat
getData(from: url)
data, response, error in
guard let data = data, error == nil else return
let image = UIImage(data: data)
let heightInPoints = image!.size.height
return heightInPoints
但我收到一个错误
return heightInPoints
错误状态
void 函数中出现意外的非 void 返回值
请帮帮我。
【问题讨论】:
【参考方案1】:问题是你想在完成块内返回一个值,你需要
func downloadImage(from url: URL,completion(_ value:CGFloat) -> Void )
getData(from: url)
data, response, error in
guard let data = data, error == nil else return
let image = UIImage(data: data)
let heightInPoints = image!.size.height
completion(heightInPoints)
顺便说一句,你不能这样做
return downloadImage(from: urll! as URL)
在heightForPhotoAtIndexPath
内部,因为 downloadImage 是异步方法,它的响应取决于网络状态,而不是在代码中串行,它的调用看起来像
// array of heights
var arr = [CGFloat]()
let urll = URL(string: urlString)
downloadImage(from: urll!) (value) in
print(value)
// append the value to it's corresponding index in an array of floats
DispatchQueue.main.async
self.collectionview.reloadData()
如果可能,您需要为图像提供预定义的高度列表,如果没有,则获取所有高度然后刷新集合
【讨论】:
以上是关于关于在 Swift 4 中返回 CGFloat 值的主要内容,如果未能解决你的问题,请参考以下文章
由于 Swift 缺少 CGFloat 的隐式转换而造成的混乱
如何在 func swift 4 中编写关于比较布尔值的 func
swift 3 中 swift 2 的 CGFloat.random(min: CGFloat, max: CGFloat) 是啥?