12756


アニメーションをさせるために以下のようにコードを書いたのですが、`fireImageView.animationImages =
animationSeq`の行で「`cannnot assign a value of type '[UIImage]?' to a value of
type '[Anyobject]?'`」とエラーが出てしまいます。  
これは型が違うから代入ができないということでしょうか？そうであればキャストを行えばよろしいですか？しかしキャストを試みても方法がよくないのかうまくいきません......。  
どなたか分かる方がいれば教えていただきたいです。  
よろしくお願いします。

[code]

    @IBOutlet weak var fireImageView: UIImageView!
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            var animationSeq = [
                UIImage(named: "fire001.png"),
                UIImage(named: "fire002.png"),
                UIImage(named: "fire003.png"),
                UIImage(named: "fire004.png"),
                UIImage(named: "fire005.png"),
                UIImage(named: "fire006.png"),
                UIImage(named: "fire007.png"),
                UIImage(named: "fire008.png"),
                UIImage(named: "fire009.png"),
                UIImage(named: "fire010.png"),
                UIImage(named: "fire011.png"),
                UIImage(named: "fire012.png"),
                UIImage(named: "fire013.png"),
                UIImage(named: "fire014.png"),
                UIImage(named: "fire015.png")
            ]
            fireImageView.animationImages = animationSeq
            fireImageView.animationDuration = 0.2
            fireImageView.animationRepeatCount = 0
        }
    
[/code]


CC BY-SA 3.0
2015-07-27T23:27:40.190
12751
2015-07-28T01:57:53.877
5210
question
swift uiimageview
animationImagesにUIImageの配列をセットしようとすると「cannnot assign a value of type '[UIImage?]'」とエラーが出る


キャストはどんな感じで行っていますか？  
その辺りも合わせて書いてもらえると。  
ちなみに変数の定義時に型推論に任せずに代入したい型で明示的に定義してもダメですか？


CC BY-SA 3.0
2015-07-28T00:06:15.163
12754
2015-07-28T00:06:15.163
100
12751
answer


> cannnot assign a value of type '[UIImage]?' to a value of type
> '[Anyobject]?'

これはエラーメッセージの書き写し間違いですね？正しくはこうでしょう？Xcodeでじっさいプロジェクトを作って、確認しました。

> cannnot assign a value of type '[UIImage?]' to a value of type
> '[Anyobject]?'

正しいほうなら、比較してなにが異なるのか理解が容易になります。  
Optional型インスタンスを要素とする配列は、非Optional型インスタンスを要素とする配列と定められた場所に配置できない。そうエラーメッセージを解釈できます。

[code]

    var animationSeq = [
            UIImage(named: "fire001.png"),
            UIImage(named: "fire002.png"),
            UIImage(named: "fire003.png"),
            UIImage(named: "fire004.png"),
            UIImage(named: "fire005.png"),
            UIImage(named: "fire006.png"),
            UIImage(named: "fire007.png"),
            UIImage(named: "fire008.png"),
            UIImage(named: "fire009.png"),
            UIImage(named: "fire010.png"),
            UIImage(named: "fire011.png"),
            UIImage(named: "fire012.png"),
            UIImage(named: "fire013.png"),
            UIImage(named: "fire014.png"),
            UIImage(named: "fire015.png")
        ]
    
[/code]

これを

[code]

    var animationSeq = [
            UIImage(named: "fire001.png")!,
            UIImage(named: "fire002.png")!,
            UIImage(named: "fire003.png")!,
            UIImage(named: "fire004.png")!,
            UIImage(named: "fire005.png")!,
            UIImage(named: "fire006.png")!,
            UIImage(named: "fire007.png")!,
            UIImage(named: "fire008.png")!,
            UIImage(named: "fire009.png")!,
            UIImage(named: "fire010.png")!,
            UIImage(named: "fire011.png")!,
            UIImage(named: "fire012.png")!,
            UIImage(named: "fire013.png")!,
            UIImage(named: "fire014.png")!,
            UIImage(named: "fire015.png")!
        ]
    
[/code]

こう変更すれば、エラーは消えます。`UIImage`のクラスリファレンスを調べれば、イニシアライザは`init?(named image:
String)`という形になっていることがわかります。つまりそのままではOptional型です。「!」で強制Unwrapして、対応します。


CC BY-SA 3.0
2015-07-28T01:34:38.667
12756
2015-07-28T01:57:53.877
2015-07-28T01:57:53.877
7362
7362
12751
answer