此代码:
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
之类的内容。< / p>
答案 0 :(得分:1)
image
中的{p> UIImageView
是属性,而不是方法。
你可以分配给它。
uiiv.image = img
而不是uiiv.image(img)
答案 1 :(得分:1)
您使用的NSData
初始化程序需要非可选NSURL
,但此初始化程序NSURL(string: "http://...")
会返回一个可选项。您可以使用可选绑定或强制解包 - 在后一种情况下:
let nsurl = NSURL(string: "http://...")!
或
let nsd: NSData = NSData(contentsOfURL: nsurl!, options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)!
此外,NSData
初始化程序返回一个可选的本身,我看到你使用了强制解包 - 在这种情况下我会使用可选绑定,因为nsd
可以是nil:
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
}
至于错误信息:
无法转换表达式&#39;(@!value UIImage?) - &gt; $ T3&#39;输入&#39; UIImage?&#39;
那是因为你正在使用一个属性,就像它是一个方法一样。
image
属于UIImage?
类型,但您将其用作UIImage?
并返回未指定类型T3
的函数。
通过正确修复代码,错误当然会消失:
uiiv.image = img