我正在使用图片
创建UIButton
我为此编写了以下代码:
let btnImg=UIButton.buttonWithType(UIButtonType.Custom) as UIButton
let img = UIImage(named: "turn_left") as UIImage
btnImg.setTitle("Turn left", forState: UIControlState.Normal)
btnImg.setImage(img, forState: UIControlState.Normal)
btnImg.frame = CGRectMake(10, 150, 200, 45)
self.view.addSubview(btnImg)
但是我在let img = UIImage(named: "turn_left") as UIImage
处收到了错误:
Swift Compiler error:
Downcast from 'UIImage?' to 'UIImage' only unwraps optionals; did you mean to use '!'?
答案 0 :(得分:35)
因为错误说你必须使用'!' ,
尝试以下代码,
let img = UIImage(named: "turn_left") as UIImage! // implicitly unwrapped
OR
let img : UIImage? = UIImage(named: "turn_left") //optional
修改强>
创建img
后,您需要在使用前将其检查为零。
答案 1 :(得分:15)
你总是可以在'如果让'但请注意语法的差异取决于swift的版本。
Swift< 2.0 强>:
if let img = img as? UIImage {
Swift 2.0 :
if let img = img as UIImage! {
请注意感叹号的位置
答案 2 :(得分:2)
如果UIImage
初始化程序无法找到指定的文件(或发生其他错误),则会根据Apple的文档返回nil
Return Value
The image object for the specified file, or nil if the method could not find the specified image.
所以你需要把支票放进去:
let img = UIImage(named: "turn_left")
if(img != nil) {
// Do some stuff with it
}
您不需要将UIImage
投射到UIImage
,这是一种浪费。
编辑:完整代码
let img = UIImage(named: "turn_left")
if(img != nil) {
let btnImg = UIButton.buttonWithType(UIButtonType.Custom) as UIButton
btnImg.setTitle("Turn left", forState: UIControlState.Normal)
btnImg.setImage(img, forState: UIControlState.Normal)
btnImg.frame = CGRectMake(10, 150, 200, 45)
self.view.addSubview(btnImg)
}
您可能需要设置else
以将按钮设置为更有可能在案例中工作的形状或其他内容" turn_left"不存在。
答案 3 :(得分:2)
由于UIImage(named:"something")
返回一个可选项(因为如果方法没有找到合适的图像,它可能是nil,最好不要显式解包结果(否则你的应用程序会崩溃)但要检查对于结果立即得到类似的东西:
if let image = UIImage(named: "something"){
// now you can use image without ? because you are sure to have an image here!
image.description
}
// continue your code here using the optional power of swift's vars! :)
方法如下:如果图像是可选的,则表示它可以为null。输入可选的函数可以处理,否则它们通常会有意外行为。 UIImage(named:)
可以返回nil,您必须处理此问题。如果你明确地打开它,你可能会在以后遇到问题。
使用if let something = ...
某些内容将在运行时自动解包,您可以安全地使用它。