来自UIImage的堕落?'到了' UIImage'只打开选项

时间:2014-11-13 05:20:19

标签: ios xcode swift uiimage

我正在使用图片

创建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 '!'?

4 个答案:

答案 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 = ... 某些内容将在运行时自动解包,您可以安全地使用它。