gpt4 book ai didi

ios - objective c 隐式转换丢失整数精度 'NSUInteger'

转载 作者:IT王子 更新时间:2023-10-29 08:04:14 25 4
gpt4 key购买 nike

在学习了关于 treehouse 的教程之后,我在 XCode 中看到了这个流行的 Object-C 警告消息。

我的按钮功能

- (IBAction)buttonPressed:(UIButton *)sender {
NSUInteger index = arc4random_uniform(predictionArray.count);
self.predictionLabel.text = [predictionArray objectAtIndex:index];
}

我在 NSUInteger 行上看到它,我有一些类似的计算器,它们似乎在谈论 32 位与 64 位数字和类型转换,但不确定如何在这里做到这一点?

我的预测数组

- (void)viewDidLoad
{
[super viewDidLoad];
predictionArray = [[NSArray alloc] initWithObjects:
@"It is certain", @"It is decidely so", @"All signs say YES", @"The stars are not aligned",
@"My reply is no",
@"It is doubtful",
@"Better not tell you now",
@"Concentrate and ask again",
@"Unable to answer now", nil];
// Do any additional setup after loading the view, typically from a nib.
}

enter image description here

最佳答案

您可以通过强制转换安全地抑制警告。

NSUInteger index = arc4random_uniform((uint32_t) predictionArray.count);

抑制警告并不总是安全,所以在确定操作是否安全之前,不要通过强制转换来消除警告。

这里发生的事情是 NSUInteger 在您的平台上是 64 位整数类型的 typedef。它不是总是 64 位,只是在某些平台上。编译器警告您其中一些位被丢弃了。如果您知道这些位不重要,则可以使用强制转换。

在这种情况下,结果是 index 将始终低于 232-1。如果 predictionArray 甚至有可能包含 232 或更多元素,那么您的程序就会出错,您必须构建一个 64 位版本的 arc4random_uniform()。您可以使用以下代码确保这一点:

assert(predictionArray.count <= (uint32_t) -1);

关于ios - objective c 隐式转换丢失整数精度 'NSUInteger',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19372312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com