当前位置: 首页 > 面试题库 >

从完成处理程序返回值-Swift

阙繁
2023-03-14
问题内容

我在Utilities类中使用loadImage方法,并且在通过闭包返回图像时遇到了一些麻烦。基本上因为我的代码可能返回图像或错误,所以在调用该方法时将其分配给image属性是行不通的。

我在类的方法声明中使用的方法是否错误,还是应该以不同的方式调用该方法以预期潜在的不同结果?谢谢

public class UtilitiesService: NSObject {
    public class func loadImage(urlString:String)
    {

    var imgURL: NSURL = NSURL(string: urlString)!
    let request: NSURLRequest = NSURLRequest(URL: imgURL)
    NSURLConnection.sendAsynchronousRequest(
        request, queue: NSOperationQueue.mainQueue(),
        completionHandler: {(response: NSURLResponse!,data: NSData!,error: NSError!) -> Void in
            if error == nil {
                self.returnImage(data)
            }
    })
}

public class func returnImage(imageData: NSData) -> UIImage {

    return UIImage(data: imageData)!

}
}

//// view controller
class someView: UIViewController {
var image.image = loadImage(url) ///will throw a return type error
 }

问题答案:

将处理程序添加到您的 loadImage 函数中:

迅捷3

 func loadImage(_ urlString: String, handler:@escaping (_ image:UIImage?)-> Void)
    {

        let imageURL: URL = URL(string: urlString)!

        URLSession.shared.dataTask(with: imageURL) { (data, _, _) in
            if let data = data{
                handler(UIImage(data: data))
            }
        }.resume()
    }

像这样调用func:

loadImage("SomeURL") { (image) -> Void in
            if let image = image{
                DispatchQueue.main.async {
                    self.imageView.image = image
                }
            }
        }

斯威夫特2.3

func loadImage(urlString: String, handler: (image:UIImage?)-> Void)
    {

        let imageURL: NSURL = NSURL(string: urlString)!

        NSURLSession.sharedSession().dataTaskWithURL(imageURL) { (data, _, _) in
            if let data = data{
                handler(image: UIImage(data: data))
            }
            }.resume()
    }

像这样调用func:

  loadImage("someURL") { (image) -> Void in
            if let image = image{
                dispatch_async(dispatch_get_main_queue()) {
                    self.imageView.image = image
                }
            }
        }


 类似资料:
  • 我一直在尝试编写一个Perl 6表达式,它执行以下逻辑:计算子表达式并返回其值,但是如果这样做导致引发异常,则捕获异常并返回固定值。 例如,假设我想将两个数字相除,如果发生错误,则表达式的计算结果为。我可以用Ruby写: 在Emacs Lisp中,可以写为: 我的第一次Perl 6尝试是这样的: 但是在这里,最终是未定义的,不管是否为零。 似乎忽略了返回的值,或者至少在描述异常如何工作的文档页面上

  • 基本上,我有一个将简单数据发布到服务器的代码,如果发布请求成功,我将返回一个布尔值,但似乎在处理数据之前就返回了布尔值,我做错了什么吗?

  • 我的完成处理程序有问题。下面是一个带有完成处理程序的函数,位于一个实用程序文件中: 我在视图控制器中调用它 输出清楚地表明该函数在运行该块之前没有等待完成: 我如何解决这个问题?

  • 问题内容: 我正在创建一个返回Dictionary的,但是当我在另一个类中调用此方法时,其值为nil。 然后,我尝试在另一个类中调用它,以便可以查看Dictionary 的值并基于该值显示数据。例如, 这里的问题是,当我调用函数时,我在尝试调用字典时收到一个值。 简而言之,我的问题是如何为完成处理程序分配值并在Xcode项目中的其他位置调用它? 问题答案: 您的问题很乱。您的示例代码无效,并且没有

  • 我目前正在学习swift,几个小时以来我一直在试图理解一个错误。由于查询,我试图从php脚本中获取一个xml文件,我使用一个完成处理程序作为回调来获取这些查询的结果。 问题是我对这些技术感到不舒服,它说缺少论据。 下面是使用完成处理程序的函数: 这是我调用这个函数的一段代码: 这段代码显示有关调用连接的此错误: 我做错了什么?为什么它要两个参数? 非常感谢您的帮助。 埃尔巴托

  • 我试图更准确地理解斯威夫特的“关闭”。 但是和太难理解了 我搜索了许多Swift帖子和官方文件,但我觉得这仍然不够。 这是官方文件的代码示例 听说使用< code>@escaping有两种方式和原因 第一个用于存储闭包,第二个用于异步操作目的。 以下是我的问题: 首先,如果执行,则将使用闭包参数执行,并且该闭包将保存在全局变量数组中。 我认为闭包是{self.x=100} {self.x=100}