images.append(UIImage(named:imageNames [i])!) - 在解包可选值时找到nil

时间:2016-07-29 22:33:57

标签: ios swift uiimage gif optional

我跟着this tutorial向gcode添加了一个gif。

我读过this经典"意外地发现了nil"从头到尾回答。不幸的是,我发现它是胡言乱语,因为我是一个总菜鸟*。

这是我的代码:

{{1}}

我向Philip Lesback寻求帮助,他告诉我要再加一个!在末尾。那没用。

*****(如果你对我一无所知感到困扰,请知道我已经尝试过代码学院,免费代码营,可汗学院编码,并开始了多本书,但我......无望,我想?我已经尝试过了。对我来说效果最好的是视频教程。)

2 个答案:

答案 0 :(得分:1)

正如你所说的那样,到目前为止你的错误在StackOverflow中是经典的,我会告诉你如何避免,当然还有为什么要面对它。

让我们从错误的起源开始,您正在使用类UIImage的可用初始值设定项,这意味着此init可以返回nil

根据Apple

  

init返回指定文件的图像对象,如果方法找不到指定的图像,则返回nil

在您的情况下,在应用程序的主要包中找不到具有该名称的图像。

为了避免运行时错误,建议您使用可选绑定而不是强制解包可选值,如下所示:

var imageNames = ["giphy-1 .jpg","giphy-2 .jpg", "giphy-3 .jpg", "giphy-4 .jpg", "giphy-5 .jpg"]

var images = [UIImage]()

for i in 0..<imageNames.count{
   if let image = UIImage(named: imageNames[i]) {
       images.append(image)
   }
}

我希望这对你有所帮助。

答案 1 :(得分:1)

特别针对您的情况的错误是由以下行引起的:

var imageNames = ["giphy-1.jpg", "giphy-2.jpg", "giphy-3.jpg", "giphy-4.jpg", "giphy-5.jpg"]

您需要删除图像名称和图像格式之间的空格,因此将变为:

function getGithubGists() {
  fetch('https://api.github.com/users/octocat/gists')
    .then(function(response) {
      response.json().then(function(data) {
        console.log('data', data)
      })
    })
   .catch(function(error) {
      console.log('Error', error)
   })
}

当我第一次看到这个问题时,这就是我的直觉告诉我的;但可以肯定的是,我决定对这两种情况进行快速测试,这证实了我最初的猜测。