我在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}