if 语句中的 NSCountedSet
NSCountedSet in an if statement
我正在尝试 NSLog
我 ViewController
上每个标签内的 @"1" 的数量。我在 storyboard
上创建了 3 个标签,然后连接了 IBOutlet
。我将这些标签中的每一个都添加到 NSMutableArray
中并分配了 initWithObjects。我手动设置了每个标签的文字为1、2、3。
现在开始我的问题。
我想使用 NScountedSet
来计算标签数组中 1 的数量。如果满足条件,则 NSLog 一些文本。
我创建了一个简单版本的代码来强调这个问题。
@property (weak, nonatomic) IBOutlet UILabel *l1;
@property (weak, nonatomic) IBOutlet UILabel *l2;
@property (weak, nonatomic) IBOutlet UILabel *l3;
@property NSMutableArray *dice;
@end
@implementation MainViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self.l1.text isEqualToString:@"1"];
[self.l2.text isEqualToString:@"2"];
[self.l3.text isEqualToString:@"3"];
self.dice = [[NSMutableArray alloc] initWithObjects: self.l1, self.l2,
self.l3, nil];
NSCountedSet *setOfNumbers = [NSCountedSet setWithObject:self.dice];
if ([setOfNumbers countForObject: @"1" == 1]) {
NSLog(@"Count of 1 in array is %lu", (unsigned long) [setOfNumbers
countForObject:@"1"] );
}
我收到 3 个警告...两个黄色和 1 个红色。
我的老师告诉我这行不通,还有其他方法可以做到。我用另一种方式做到了。我真的很困惑为什么这不起作用。我只在 class 的第 2 周。
有人可以解释为什么这不起作用以及我如何让它起作用吗?
谢谢
显然你有几个问题。
- 像
[self.l1.text isEqualToString:@"1"];
这样的行什么都不做。您比较标签的文本但不检查测试结果。
- 您将标签而不是标签的文本添加到
self.dice
数组。
if
行有语法错误。
- 您使用数组而不是数组中的对象创建计数集。
- 将计数集中的计数存储在一个变量中,这样您就不会计算两次。
这是一些固定代码:
@implementation MainViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.dice = [[NSMutableArray alloc] initWithObjects:self.l1.text, self.l2.text, self.l3.text, nil];
NSCountedSet *setOfNumbers = [NSCountedSet setWithArray:self.dice];
NSUInteger count = [setOfNumbers countForObject: @"1"];
if (count == 1) {
NSLog(@"Count of 1 in array is %lu", (unsigned long)count);
}
}
我正在尝试 NSLog
我 ViewController
上每个标签内的 @"1" 的数量。我在 storyboard
上创建了 3 个标签,然后连接了 IBOutlet
。我将这些标签中的每一个都添加到 NSMutableArray
中并分配了 initWithObjects。我手动设置了每个标签的文字为1、2、3。
现在开始我的问题。
我想使用 NScountedSet
来计算标签数组中 1 的数量。如果满足条件,则 NSLog 一些文本。
我创建了一个简单版本的代码来强调这个问题。
@property (weak, nonatomic) IBOutlet UILabel *l1;
@property (weak, nonatomic) IBOutlet UILabel *l2;
@property (weak, nonatomic) IBOutlet UILabel *l3;
@property NSMutableArray *dice;
@end
@implementation MainViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self.l1.text isEqualToString:@"1"];
[self.l2.text isEqualToString:@"2"];
[self.l3.text isEqualToString:@"3"];
self.dice = [[NSMutableArray alloc] initWithObjects: self.l1, self.l2,
self.l3, nil];
NSCountedSet *setOfNumbers = [NSCountedSet setWithObject:self.dice];
if ([setOfNumbers countForObject: @"1" == 1]) {
NSLog(@"Count of 1 in array is %lu", (unsigned long) [setOfNumbers
countForObject:@"1"] );
}
我收到 3 个警告...两个黄色和 1 个红色。 我的老师告诉我这行不通,还有其他方法可以做到。我用另一种方式做到了。我真的很困惑为什么这不起作用。我只在 class 的第 2 周。
有人可以解释为什么这不起作用以及我如何让它起作用吗? 谢谢
显然你有几个问题。
- 像
[self.l1.text isEqualToString:@"1"];
这样的行什么都不做。您比较标签的文本但不检查测试结果。 - 您将标签而不是标签的文本添加到
self.dice
数组。 if
行有语法错误。- 您使用数组而不是数组中的对象创建计数集。
- 将计数集中的计数存储在一个变量中,这样您就不会计算两次。
这是一些固定代码:
@implementation MainViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.dice = [[NSMutableArray alloc] initWithObjects:self.l1.text, self.l2.text, self.l3.text, nil];
NSCountedSet *setOfNumbers = [NSCountedSet setWithArray:self.dice];
NSUInteger count = [setOfNumbers countForObject: @"1"];
if (count == 1) {
NSLog(@"Count of 1 in array is %lu", (unsigned long)count);
}
}