【问题标题】:Swift: Creating an array of UIImageSwift:创建 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

【问题讨论】:

    标签: ios arrays uiimage swift


    【解决方案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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-08
      • 1970-01-01
      • 2019-05-17
      • 2014-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多