1

抱歉,我意识到这是一个简单的问题,但我是 iOS 开发和 Objective-c 的新手。

来自 ac# 背景,我会尝试解析文本框中的字符串,然后如果 true 将其分配给 int 以用于总和,然后将其分配给标签。

在 iOS 和 obj-c 中,我在上面遇到了一些问题,然后我需要释放和分配。

任何帮助将不胜感激。

4

3 回答 3

3

你可以用它NSScanner来做到这一点。例如:

NSString *test = @"45";
NSScanner *scanner = [[NSScanner alloc] initWithString:test];
NSInteger integer;
if ([scanner scanInteger:&integer])
{
    NSLog(@"The value is: %i", integer);
}
else
{
    NSLog(@"Didn't parse successfully.");
}

作为另一个答案说明,您可以使用intValueor integerValueon NSString。这种方法有几点需要注意:

  1. 如果解析失败,则返回 0。这使得无法确定解析的值是否实际为 0,或者解析是否刚刚失败。
  2. 两者都NSScanner允许intValue空格,因此    45会成功解析。使用 NSScanner,如果您愿意,可以使用setCharactersToBeSkippedto nil 禁用它:

    [scanner setCharactersToBeSkipped:nil];
    

您可以从那里执行正常的算术运算,例如integer + 20,或对您解析的其他数字求和。

如果语言环境很重要(请参阅Julien 的回答),那么您可以setLocale在 NSScanner 上使用该方法NSLocale,例如,如果我们想确保始终使用 en-US 语言环境:

NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[scanner setLocale: locale];

我需要释放和分配什么。

这取决于很多事情。你在用ARC吗?如果是这样,那么 ARC 将为您处理发布。您可能需要阅读内存管理。

于 2012-08-05T16:11:29.117 回答
2

从 UITextField 获取字符串(假设 *textField 是您的 UITextField)

int integetValue=[textField.text intValue];

然后你可以像普通整数一样对它进行求和。要将此值设置为 UILabel 你需要做(假设 sum 是你的整数摘要):

[label setText:[NSString stringWithFormat:@"%d",sum]];

在这种情况下,您不需要分配/释放任何东西。

于 2012-08-05T15:53:46.243 回答
1

这取决于您的字符串有多“国际化”。

如果您正在处理低级格式化数字(即您完全忽略了用户的语言环境),您可以使用-[NSString intValue](或类似方法)或-[NSScanner initWithString:]将字符串转换为数字。您可以使用"%d"格式说明符(和其他格式说明符)将数字转换为字符串。

但是,您可能希望尊重用户的语言环境,其中小数分隔符可以是点或逗号,其中数字本身可以使用与通常的“阿拉伯数字”不同的字符集。

在这种情况下,您想使用NSNumberFormatter或设置NSScanner的语言环境。

请注意,选择要使用 all 解释数字的语言环境取决于字符串来自(或去往)的位置。

于 2012-08-05T16:30:39.107 回答