Swift 无法转换表达式';s型&x27;(@!值UIImage?)->$T3和x27;输入';UIImage?&x27;
此代码:Swift 无法转换表达式';s型&x27;(@!值UIImage?)->$T3和x27;输入';UIImage?&x27;,swift,uiimage,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(im
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
和@这样的东西对我以后会很有帮助!值
表示。UIImageView
中的图像是一个属性,而不是方法
你可以直接分配给它
uiiv.image = img
您正在使用的
NSData
初始值设定项需要一个非可选的NSURL
,而不是uiiv.image(img)
http://...“”返回可选值。您可以使用可选绑定或强制展开-在后一种情况下:
let nsurl = NSURL(string: "http://...")!
或
此外,NSData
初始值设定项本身返回一个可选值,我看到您使用了强制展开-在本例中,我将使用可选绑定,因为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
}
至于错误消息: 无法将表达式的类型“(@!value UIImage?)->$T3”转换为类型“UIImage?” 这是因为您将属性当作方法来使用
image
属于UIImage?
类型,但您将其用作获取UIImage?
并返回未指定类型的T3
的函数
通过正确修复代码,错误当然会消失:
uiiv.image = img
Xcode坚持要放一个
代码>在NSData的末尾,即使我遵循您的建议,也只需手动删除它-在声明nsd
变量时还要确保删除类型,并让类型推断完成它的工作:让nsd=…
好,酷-那么您还可以解释一下$T3
和@!value
mean?这是swift编译器抛出的一条晦涩难懂、毫无意义的错误消息——有一长串无意义的错误消息。我没有解释,但通常在这些情况下,解决方案是简单的,在许多情况下,涉及到选择。实际上,在这种情况下,它给出了一些提示,而不是我在前面的评论中提到的模糊的提示。请参阅更新的答案修复了问题,非常感谢各位。首先解释$T3
和@!value
获取分数。您可能需要更正@!值
到@lvalue
@lvalue
表示可分配变量(即var
)。您是否建议我更正错误消息?如何更改错误消息,这会给我带来什么好处?这真的是@!值
?在我的环境(Xcode6.1)中,即@lvalue
。不是代码>,但l
。
uiiv.image = img