附加到数组的元素返回nil

时间:2018-03-31 23:13:47

标签: swift

我有一个UIImages数组,我想分成两个独立的数组, 一个包含索引为偶数的对象,另一个包含索引为奇数的对象。

这是我正在使用的代码:

var evenImages: [UIImage]?
var oddImages: [UIImage]?

var imageArray: [UIImage]? {
    didSet{

        for z in 0..<((imageArray?.count)!) {
            if z % 2 == 0 {
                evenImages?.append(imageArray![z])
            } else {
                oddImages?.append(imageArray![z])
            }

            print(evenImages?.count) //prints nil
            print(oddImages?.count) //prints nil
        }
    }
}

到目前为止的问题是,虽然对象似乎被附加到适当的数组,但每当我尝试使用它们时,它们都是零。也许这是变量实例化的顺序问题?有什么想法吗?

2 个答案:

答案 0 :(得分:2)

evenImages?.append(imageArray![z])

此行的含义是:&#34;如果evenImages不是nil,请将imageArray![z]添加到其中。&#34;

不幸的是,如果evenImagesnil,则不会发生任何事情。而且,由于看起来你从未初始化它,情况就是这样。

后来:

print(evenImages?.count)

这意味着:&#34;如果evenImages不是nil,则打印其count。否则,只需打印nil。&#34;不幸的是,evenImages仍为nil,因此您获得nil

解决方案:evenImages根本不需要是可选的。只需将其初始化为空数组:

var evenImages: [UIImage] = []
var oddImages: [UIImage] = []

然后,您可以在访问时删除所有?标记,并且它永远不会是nil

旁注:我建议将imageArray更改为非可选,并将其初始化为空的[]数组。通过这种方式,当你将其组件追加到偶数和奇数数组时,你可以摆脱丑陋(并且容易崩溃,如果nil碰巧意外地以某种方式进入那里)!

答案 1 :(得分:1)

您已忘记初始化数组

尝试添加

evenImages = []
oddImages = []
在你的for循环之前