Swift:创建 UIImage 数组
Posted
技术标签:
【中文标题】Swift:创建 UIImage 数组【英文标题】:Swift: Creating an array of UIImage 【发布时间】:2014-06-11 20:40:07 【问题描述】:使用 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
【问题讨论】:
【参考方案1】:你有两个问题(而且没有正则表达式!)
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")!]
您需要追加到数组,因为(摘录from docs):
您不能使用下标语法将新项目附加到项目的末尾 大批。如果您尝试使用下标语法来检索或设置值 对于超出数组现有边界的索引,您将 触发运行时错误。但是,您可以检查索引是否有效 在使用它之前,通过将其与数组的 count 属性进行比较。除了 当 count 为 0(表示数组为空)时,最大有效索引 在数组中将始终为 count - 1,因为数组的索引来自 零。
当然,如果可能,您总是可以简化它:
var logoImage: [UIImage] = [
UIImage(named: "logo1.png")!,
UIImage(named: "logo2.png")!
]
编辑:请注意,UIImage 现在有一个"failable" initializer,这意味着它返回一个可选项。我更新了所有代码以反映这一变化以及数组语法的变化。
【讨论】:
因此,正如对 ackStOverflow 的响应所评论的那样,UIImage[]()
会引发 Constructive statements on a line must be separated by a ';'
错误。此外,那些 () 括号看起来很像函数调用。这看起来也有点奇怪,是吗? UIImage[];()
。最后,为什么我必须使用append;为什么我不能只为索引分配一个值?
@kmiklas Array<UIImage>
是一个类型,你需要实例化它(使用括号):Array<UIImage>()
,或者如果你指定类型,你可以只分配一个数组文字(这是第一个两个例子)。 UIImage[]
只是 Array<UIImage>
的语法糖
@kmiklas 添加了文档摘录,解释了为什么需要附加
由于某种原因,您拥有的简化方式不再起作用。
@JohnRiselvato UIImage
现在是一个失败的初始化器(意味着它返回一个可选的)- 将更新答案【参考方案2】:
您正在声明 logoImages 的类型,但没有创建该类型的实例。
使用var logoImages = UIImage[]()
,它将为您创建一个新数组。
...然后在创建一个新的空数组实例后,如@Jiaaro 的回答中所述,您不能使用下标添加到空数组
【讨论】:
首先,这会抛出一个错误,“一行上的构造语句必须用';'分隔。Xcode想要`UIImage[];() 其次,我看到了这个,但是那两个括号()
把我当作函数调用吓跑了。
@kmiklas 听起来你还有其他事情要做。 ackSt 给出的行是正确的,不应为您生成错误。在你所在的地方加一个分号完全改变了意思。
@kmiklas 确保您使用的是var logoImages = UIImage[]()
,它创建了一个用于存储 UIImage 对象的新数组,然后将其分配给 logoImages 变量(从分配中推断变量的类型)...听起来像您可能错误地使用分号代替等号?即var logoImages: UIImage[]()
会产生您在评论中描述的错误类型
...另外,这两个括号 是 一个函数调用 :) 他们在 Array 上调用 init()
方法,就像你对任何其他结构或类【参考方案3】:
var image : UIImage = UIImage(named:"logo.png")
var logoImages = [image]
【讨论】:
以上是关于Swift:创建 UIImage 数组的主要内容,如果未能解决你的问题,请参考以下文章