Iphone 使用NSString一次确定一个输入字符?
我正在用Xcode为iPhone制作一个应用程序,我觉得Xcode把我搞砸了…Iphone 使用NSString一次确定一个输入字符?,iphone,objective-c,xcode,Iphone,Objective C,Xcode,我正在用Xcode为iPhone制作一个应用程序,我觉得Xcode把我搞砸了… 我在ViewController.h中有: @property (weak, nonatomic) IBOutlet UITextField *passwordField; @property (weak, nonatomic) IBOutlet UILabel *passwordResult; - (IBAction)go:(id)sender; 在ViewController.m中: - (void)
我在
ViewController.h
中有:
@property (weak, nonatomic) IBOutlet UITextField *passwordField;
@property (weak, nonatomic) IBOutlet UILabel *passwordResult;
- (IBAction)go:(id)sender;
在ViewController.m
中:
- (void)viewDidLoad {
A = @"A";
}
- (IBAction)go:(id)sender {
password = [NSString stringWithFormat:@"%@", _passwordField.text];
if (password == A) {
_passwordResult.text = [NSString stringWithFormat:@"%@", A];
}
}
如果输入为大写字母“A”,则应在标签上打印大写字母“A”,对吗?
如果没有,我会怎么做
注意:我不想只是复制输入的短语并打印出来,我想制作一个密码破解应用程序,看看它是否有效…而不是:
if (password == A)
使用
否则,您只是比较指针,而不是字符串本身的内容。对于字符串比较,请使用
[someString IsequalString:anotherString]
使用=
将比较两个指针是否指向同一对象,而不是是否指向具有相同内容的对象。即使两个指针包含相同的字符串,也不意味着它们指向相同的对象
如果两个人都有同一辆车,所以用同一把钥匙开锁,两把钥匙不相等,不能同时打开两辆车;每辆车只会打开为其制造的汽车。如果一个人有一辆车,但有一把额外的钥匙,他们是平等的,因为他们打开了同一辆车(对象)。你可以这样想指针。正如Rickay和TrudysCounsin所指出的,你的相等性测试应该是
IsequalString
而不是=
正如CodaFi和dreamlax所暗示的,这一行:
_passwordResult.text = [NSString stringWithFormat:@"%@", A];
包含一些冗余,因为和_passwordResult.text都是NSString,所以您不需要创建中间NSString:
_passwordResult.text = A;
就够了
还有一些其他的风格观察
你大概在什么地方声明了你的iVar“A”。我建议您使用一个属性声明,就像您为您的IBOutlets所做的那样,并给它一个更好的名称
@property(非原子,强)NSString*aBetterNamedA
即使在对象内部,也应使用访问器语法:
self.aBetterNamedA
self.passwordResult.txt
(唯一的例外应该是你的
init
和dealloc
方法,它们应该直接处理iVar)。噢,那些冗余的+stringWithFormat:
调用的恐怖@CodaFi:我见过更糟的:NSString*str=[[NSString alloc]initWithString:[NSString stringWithFormat:@“%@”,另一个str]]代码>@dreamlax至少有4.6版会让你知道这一点。迫不及待地等待这些新的编译器警告发出。
_passwordResult.text = A;