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&lt;UIImage&gt; 是一个类型,你需要实例化它(使用括号):Array&lt;UIImage&gt;(),或者如果你指定类型,你可以只分配一个数组文字(这是第一个两个例子)。 UIImage[] 只是 Array&lt;UIImage&gt; 的语法糖 @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 数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中识别 UIImage 数组中的 Tapped UIImage

如何在 swift 3 中使用 UIImage 数组为零?

Swift(iOS)将UIImage数组插入子视图?

如何将图像存储到 UIImage 数组(Swift)

Swift中的像素数组到UIImage

在 Swift 中将字节数组转换为 UIImage