16364

[code]

    var gazoui:[UIImage]!
    var gazouiii:UIImage
    gazouiii = UIImage(named: "m1.gif")!
    gazoui[1] = UIImage(named: "m1.gif")!
    
[/code]

m1.gifはプロジェクトに入ってます  
エンコードはできるんですがすぐにシミュレーターが落ちます  
`gazouiii` のほうの代入はできていて `gazouiii` は `nil` ではなくなるんですが`gazoui[1]` のほうで "fatal
error: unexpectedly found nil while unwrapping an Optional value" のエラーで落ちます  
なぜですか？

for文で配列に一気に連番の画像をUIImageで入れるのが目的です


CC BY-SA 3.0
2015-09-08T01:37:49.153
16361
2015-09-08T08:20:10.643
2015-09-08T02:34:52.083
7831
10854
question
swift uiimage
Swiftで配列にUIImage!を代入→nilだから代入できない？


gazouiがnilになってるのが原因ではないでしょうか？  
これが配列を参照するようにすれば、正常に動作すると思われます。

[code]

    var gazoui:[UIImage]! = Array<UIImage>(count: 2, repeatedValue: UIImage())
    var gazouiii:UIImage
    gazouiii = UIImage(named: "m1.gif")!
    gazoui[1] = UIImage(named: "m1.gif")!
    
[/code]


CC BY-SA 3.0
2015-09-08T02:17:42.053
16363
2015-09-08T02:17:42.053
7459
16361
answer


オブジェクトの宣言とイニシアライズの基礎について、まず説明します。  
非Optional型と、Optional型では、イニシアライズのしかたが異なります。

[code]

    var images: [UIImage]?
    // var images: [UIImage]! でもおなじ
    println(images == nil)
    
[/code]

出力は`true`になります。Optional型を宣言すると、初期値がに`nil`になります。対して非Optional型は、宣言しても変数には`nil`は入らず、「処理が完結していない」状態になります。

[code]

    var images: [UIImage] // このままでは未完のコード
    images = [UIImage]()
    
[/code]

* * *
[code]

    import UIKit
    
    var images: [UIImage] = [UIImage]() // (1)
    let image1 = UIImage(named: "picture1.png")
    images.append(image1) // (2)
    let image2 = UIImage(named: "picture2.png")
    images.append(image2)
    
[/code]

非Optional型なら、オブジェクトが`nil`でないことが保証されますので、`nil`のオブジェクトを操作することで起きるエラーを、心配しなくてよくなります。(1)  
配列に要素を追加するには、メソッド`append()`を使うと便利。(2)

> エンコードはできるんですがすぐにシミュレーターが落ちます

「エンコード」じゃなくて **ビルド** といいますね。


CC BY-SA 3.0
2015-09-08T02:28:48.197
16364
2015-09-08T08:20:10.643
2015-09-08T08:20:10.643
7362
7362
16361
answer