- (UIImage*)returnRandomBackground{
int selectedImage = (arc4random() % 4) + 1;
UIImage *imageToReturn;
if (selectedImage == 1) {
imageToReturn = Image1;
}
else if (selectedImage == 2) {
imageToReturn = Image2;
}
else if (selectedImage == 3) {
imageToReturn = Image3;
}
else if (selectedImage == 4) {
imageToReturn = Image4;
}
return imageToReturn;
}
未定义或返回给调用者的垃圾值。
对我来说这段代码看起来是合法的,有什么问题吗?
编译器不够聪明,无法推断出(arc4random() % 4) + 1
总是在[1..4]
范围内。只要将imageToReturn
初始化为null,警告就会消失。
注意:如果你使用这个,并且在某些时候你改变了随机数生成中的模数,如果你不相应地调整你的if
/else
序列,你很容易将null
s返回给调用者(没有来自友好编译器的警告)。
如果这不是您想要的,请在某处使用断言(可能通过添加"catch-all"else
子句并在那里断言)。
另外,考虑在这里使用switch
块而不是if
/else
序列,在我看来这是最自然的结构。
编译器会认为可能存在selectedImage = 5
,这意味着imageReturn
有可能未被赋值。您必须将最后一个else if
更改为else
,以确保始终分配imageReturn
。
看看如果selectedImage = 5
,代码会做什么。它会打破。
或者,您可以直接初始化imageToReturn
UIImage *imageToReturn = nil;
那么,无论发生什么,您都不会返回一个垃圾值。