web-dev-qa-db-ja.com

Swift:UIImageの配列を作成する

Swiftを使用して、単純なアニメーション用のUIImageオブジェクトの配列を作成しようとしています。 animationImagesのコンテキストヘルプは、「配列にはUI Imageオブジェクトが含まれている必要があります」と読み取ります。

私は次のように上記の配列を作成しようとしましたが、構文を正しく取得できないようです:

var logoImages: UIImage[]
logoImages[0] = UIImage(name: "logo.png")

これはスローします:!初期化される前に使用される可変logoImages

それから私は試した

var logoImages = []
logoImages[0] = UIImage(named: "logo.png")

スローするもの:!この式の結果に割り当てることはできません

ここでドキュメントを確認しましたが、コンテキストは同じではありません: https://developer.Apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/CollectionTypes.html

35
kmiklas

あなたには2つの問題があります(そして正規表現なし!)

1.配列を作成していません。あなたがする必要があります:

_var logoImages: [UIImage] = []
_

または

_var logoImages: Array<UIImage> = []
_

または

_var logoImages = [UIImage]()
_

または

_var logoImages = Array<UIImage>()
_

2.配列に新しいオブジェクトを追加する場合は、Array.append()または同等の構文糖を使用する必要があります。

_logoImages.append(UIImage(named: "logo.png")!)
_

または

_logoImages += [UIImage(named: "logo.png")!]
_

または

_logoImages += [UIImage(named: "logo.png")!, UIImage(named: "logo2.png")!]
_

配列に追加する必要があるのは、(抜粋 ドキュメントから ):

添字構文を使用して、配列の末尾に新しいアイテムを追加することはできません。添字構文を使用して、配列の既存の境界外にあるインデックスの値を取得または設定しようとすると、ランタイムエラーが発生します。ただし、配列のcountプロパティと比較することにより、使用する前にインデックスが有効であることを確認できます。 countが0(配列が空であることを意味する)の場合を除き、配列は0からインデックス付けされるため、配列内の最大の有効なインデックスは常にcount-1になります。

もちろん、可能な場合はいつでも単純化できます。

_var logoImage: [UIImage] = [
    UIImage(named: "logo1.png")!,
    UIImage(named: "logo2.png")!
]
_

edit:UIImageに "failable" initializer が追加されたことに注意してください。これはオプションを返すことを意味します。この変更と配列構文の変更を反映するために、すべてのコードを更新しました。

81
Jiaaro

LogoImagesのタイプを宣言していますが、そのタイプのインスタンスは作成していません。

新しい配列を作成するvar logoImages = UIImage[]()を使用します。

...そして、@ Jiaaroの回答で説明されているように、新しい空のArrayインスタンスを作成した後、添え字を使用して空の配列に追加することはできません

2
fqdn
var image : UIImage = UIImage(named:"logo.png")    
var logoImages = [image]
1
Marco Speziali