这段代码:
var uiiv = UIImageView()
let nsurl = NSURL(string: "http://...")
var err: NSError?
let nsd: NSData = NSData(contentsOfURL: nsurl, options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)!
var img = UIImage(data: nsd)
uiiv.image(img)
产生这个错误:
Cannot convert the expression's type '(@!value UIImage?) -> $T3' to type 'UIImage?'
任何人都可以向我解释如何修复此错误,以及错误的实际含义,这对我将来了解 $T3
和 @ 之类的东西会有帮助!value
表示。
最佳答案
您正在使用的 NSData
初始化器需要一个非可选的 NSURL
,但是这个初始化器 NSURL(string: "http://...")
返回一个可选的。您可以使用可选绑定(bind)或强制展开 - 在后一种情况下:
let nsurl = NSURL(string: "http://...")!
或
let nsd: NSData = NSData(contentsOfURL: nsurl!, options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)!
此外,NSData
初始值设定项本身返回一个可选值,我看到您使用了强制解包 - 在这种情况下我会使用可选绑定(bind),因为 nsd
可以是无:
var uiiv = UIImageView()
let nsurl = NSURL(string: "http://...")!
var err: NSError?
let nsd = NSData(contentsOfURL: nsurl, options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)
if let nsd = nsd {
var img = UIImage(data: nsd)
uiiv.image = img
}
至于错误信息:
Cannot convert the expression's type '(@!value UIImage?) -> $T3' to type 'UIImage?'
那是因为您将属性当作方法来使用。
image
是 UIImage?
类型,但您将其用作获取 UIImage?
并返回未指定类型的函数 T3
。
通过正确修复代码,错误当然会消失:
uiiv.image = img
关于swift - 无法将表达式的类型 '(@!value UIImage?) -> $T3' 转换为类型 'UIImage?',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27146087/