2016-07-29 54 views
0

我跟着this tutorial添加gif到Xcode。images.append(UIImage(named:imageNames [i])!) - 發現零,同時展開可選值

我讀過this經典的「意外發現無」答案從開始到結束。不幸的是,我發現它是胡言亂語,因爲我是一個總noob *。

這是我的代碼:

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 


     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{ 

       images.append(UIImage(named: imageNames[i])!) 

     } 

     theGif.animationImages = images 
     theGif.animationDuration = 1.0 
     theGif.startAnimating() 

我問菲利普Lesback的幫助,他告訴我再添!最後。這沒有用。 (如果它讓你感到困惑,我什麼都不知道,請知道我已經試過了Code Academy,Free Code Camp,Khan Academy的編碼,並且開始了多本書,但是我......無望,我假設我已經嘗試過了,看起來最適合我的是視頻教程。)

回答

1

正如你所說,你的錯誤在這裏是StackOverflow中的一個經典,我會告訴你如何避免,當然也是爲什麼你重新面對它。

讓我們從錯誤的起源開始,使用類UIImage的failable初始化程序,這意味着此init可以返回nil

根據Apple

初始化返回圖像對象指定的文件或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

專門針對你的情況的錯誤是由於以下行:

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

您需要刪除的圖像名稱和圖像格式之間的空間中,因此,將成爲:

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

這就是我第一次看這個問題時我的直覺告訴我的;但是可以肯定的是,我決定對這兩種情況進行快速測試,這是我最初猜測的。

相關問題