抱歉,我意识到这是一个简单的问题,但我是 iOS 开发和 Objective-c 的新手。
来自 ac# 背景,我会尝试解析文本框中的字符串,然后如果 true 将其分配给 int 以用于总和,然后将其分配给标签。
在 iOS 和 obj-c 中,我在上面遇到了一些问题,然后我需要释放和分配。
任何帮助将不胜感激。
抱歉,我意识到这是一个简单的问题,但我是 iOS 开发和 Objective-c 的新手。
来自 ac# 背景,我会尝试解析文本框中的字符串,然后如果 true 将其分配给 int 以用于总和,然后将其分配给标签。
在 iOS 和 obj-c 中,我在上面遇到了一些问题,然后我需要释放和分配。
任何帮助将不胜感激。
你可以用它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.");
}
作为另一个答案说明,您可以使用intValue
or integerValue
on NSString
。这种方法有几点需要注意:
两者都NSScanner
允许intValue
空格,因此 45
会成功解析。使用 NSScanner,如果您愿意,可以使用setCharactersToBeSkipped
to nil 禁用它:
[scanner setCharactersToBeSkipped:nil];
您可以从那里执行正常的算术运算,例如integer + 20
,或对您解析的其他数字求和。
如果语言环境很重要(请参阅Julien 的回答),那么您可以setLocale
在 NSScanner 上使用该方法NSLocale
,例如,如果我们想确保始终使用 en-US 语言环境:
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[scanner setLocale: locale];
我需要释放和分配什么。
这取决于很多事情。你在用ARC吗?如果是这样,那么 ARC 将为您处理发布。您可能需要阅读内存管理。
从 UITextField 获取字符串(假设 *textField 是您的 UITextField)
int integetValue=[textField.text intValue];
然后你可以像普通整数一样对它进行求和。要将此值设置为 UILabel 你需要做(假设 sum 是你的整数摘要):
[label setText:[NSString stringWithFormat:@"%d",sum]];
在这种情况下,您不需要分配/释放任何东西。
这取决于您的字符串有多“国际化”。
如果您正在处理低级格式化数字(即您完全忽略了用户的语言环境),您可以使用-[NSString intValue]
(或类似方法)或-[NSScanner initWithString:]
将字符串转换为数字。您可以使用"%d"
格式说明符(和其他格式说明符)将数字转换为字符串。
但是,您可能希望尊重用户的语言环境,其中小数分隔符可以是点或逗号,其中数字本身可以使用与通常的“阿拉伯数字”不同的字符集。
在这种情况下,您想使用NSNumberFormatter
或设置NSScanner
的语言环境。
请注意,选择要使用 all 解释数字的语言环境取决于字符串来自(或去往)的位置。