来自'UIImage'的沮丧?'UIImage'只展开选项

Net*_*emo 18 xcode uiimage ios swift

我正在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)
Run Code Online (Sandbox Code Playgroud)

但我得到以下错误let img = UIImage(named: "turn_left") as UIImage:

Swift Compiler error:
 Downcast from 'UIImage?' to 'UIImage' only unwraps optionals; did you mean to use '!'?
Run Code Online (Sandbox Code Playgroud)

Tos*_*lji 35

正如错误所述你必须使用'!' ,

试试下面的代码,

   let img  = UIImage(named: "turn_left") as UIImage!  // implicitly unwrapped
Run Code Online (Sandbox Code Playgroud)

要么

   let img : UIImage? = UIImage(named: "turn_left")  //optional
Run Code Online (Sandbox Code Playgroud)

编辑

创建后,img您需要在使用前检查它是否为零.

  • 警惕这个解决方案.虽然它可以工作,但你仍然明确地将你的UIImage转换为UIImage(多余的代码),而不是利用Swifty隐式类型.在使用它之前,你还需要检查`img`是不是nil. (2认同)

Dus*_*ams 15

您总是可以在'if let'中执行此操作,但请注意语法的差异,具体取决于swift的版本.

斯威夫特<2.0:

if let img = img as? UIImage {
Run Code Online (Sandbox Code Playgroud)

Swift 2.0:

if let img = img as UIImage! {
Run Code Online (Sandbox Code Playgroud)

注意感叹号的位置