Swift:创build一个UIImage数组

使用Swift,我试图创build一个简单的animation的UIImage对象的数组。 animationImages上下文帮助读取“数组必须包含UI图像对象”。

我试图创build如下的数组,但似乎无法得到正确的语法:

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

这抛出:! variableslogoImages在被初始化之前使用

然后我试了一下

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

抛出:! 不能分配给这个expression式的结果

我已经在这里查看了文档,但上下文不一样: https : //developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/CollectionTypes.html

你有两个问题(没有正则expression式!)

1.你没有创build一个数组。 你需要做的是:

 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")!] 

你需要追加到数组,因为(摘自文档 ):

您不能使用下标语法将新项目追加到数组的末尾。 如果尝试使用subscript语法检索或设置数组现有边界之外的索引的值,则会触发运行时错误。 但是,通过将其与数组的count属性进行比较,您可以在使用它之前检查索引是否有效。 除了count为0(意味着数组为空),数组中最大的有效索引总是count-1,因为数组从0开始索引。

当然你可以随时简化它:

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

编辑:请注意,UIImage现在有一个“failable”初始值设定项 ,这意味着它返回一个可选项。 我已经更新了所有的代码,以反映这种变化以及数组语法的变化。

您正在声明logoImages的types,但不创build该types的实例。

使用var logoImages = UIImage[]()这将为您创build一个新的数组。

…然后在创build一个新的空数组实例之后,如@Jiaaro的答案中所述,您不能使用下标来添加到一个空数组

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