在 Swift 中从外部函数调用值变量



我有一个问题,从外部函数调用类中的变量。

斯威夫特给了我以下错误:使用未解析的标识符"图像文件名"我该如何解决?我应该如何获取Filename变量的值?

我的代码:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    if (collectionView == self.collectionView1)
    {
        let cell : FeaturedCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier(self.reuseIdentifierFeatured, forIndexPath: indexPath) as! FeaturedCollectionViewCell
        let imgURL: NSURL = NSURL(string: "http://localhost:9001/feature-0.jpg")!
        let request: NSURLRequest = NSURLRequest(URL: imgURL)
        let session = NSURLSession.sharedSession()
        let task = session.dataTaskWithRequest(request){
            (data, response, error) -> Void in
            if (error == nil && data != nil)
            {
                func display_image()
                {
                   let imageFilename = UIImage(data: data!)
                }
                dispatch_async(dispatch_get_main_queue(), display_image)
            }
        }
        task.resume()
        cell.featuredImage.image = UIImage(named: imageFilename)
        return cell
    }
}

图像捕获链接

如果你在函数外部和函数内部声明变量,你设置值怎么样?然后,您可以访问变量及其值。

您的问题肯定是无法访问变量,因为它只是知道函数内部。

法典:

试试这样...

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

if (collectionView == self.collectionView1)
{
    let cell : FeaturedCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier(self.reuseIdentifierFeatured, forIndexPath: indexPath) as! FeaturedCollectionViewCell
    var imageFilename: UIImage

    let imgURL: NSURL = NSURL(string: "http://localhost:9001/feature-0.jpg")!
    let request: NSURLRequest = NSURLRequest(URL: imgURL)
    let session = NSURLSession.sharedSession()
    let task = session.dataTaskWithRequest(request){
        (data, response, error) -> Void in


        if (error == nil && data != nil)
        {
            func display_image()
            {
               imageFilename = UIImage(data: data!)
            }
            dispatch_async(dispatch_get_main_queue(), display_image)
        }

    }
    task.resume()
    cell.featuredImage.image = UIImage(named: imageFilename)
    return cell
}
}

如果这对你有用,请写信给我。

imageFileName的作用域是声明它的函数display_image,在该if之外不可见。问题不在于访问类中的变量,您的自定义单元格类似乎没有声明名为 imageFileName 的变量

编辑

为什么不在完成闭包中设置图像?

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    if (collectionView == self.collectionView1) {
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(self.reuseIdentifierFeatured, forIndexPath: indexPath) as! FeaturedCollectionViewCell
        let imgURL: NSURL = NSURL(string: "http://localhost:9001/feature-0.jpg")!
        let request: NSURLRequest = NSURLRequest(URL: imgURL)
        let session = NSURLSession.sharedSession()
        let task = session.dataTaskWithRequest(request) {
            (data, response, error) -> Void in
            if (error == nil && data != nil) {
                dispatch_async(dispatch_get_main_queue()) {
                    cell.featuredImage.image = UIImage(data: data!)
                }
            }
        }
        task.resume()
        return cell
    }
}

请注意,由于异步请求可能以未定义的顺序完成和单元格重用,因此最终可能会得到不正确的单元格图像,您可以将图像 url 保存在单元格中,并检查它是否与闭包完成时在闭包中捕获的图像相同。

相关内容

  • 没有找到相关文章

最新更新