我有一个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
}
}
}
到目前为止的问题是,虽然对象似乎被附加到适当的数组,但每当我尝试使用它们时,它们都是零。也许这是变量实例化的顺序问题?有什么想法吗?
答案 0 :(得分:2)
evenImages?.append(imageArray![z])
此行的含义是:&#34;如果evenImages
不是nil
,请将imageArray![z]
添加到其中。&#34;
不幸的是,如果evenImages
为nil
,则不会发生任何事情。而且,由于看起来你从未初始化它,情况就是这样。
后来:
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循环之前