无法转换表达式'(@!value UIImage?) - > $ T3'输入' UIImage?'

时间:2014-11-26 09:58:23

标签: swift uiimage

此代码:

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>

2 个答案:

答案 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