characterAtIndex 是否只能用于 NSString? characterAtIndex 的主要目的是什么?

Does characterAtIndex only have to be used for an NSString? And what is the main purpose of characterAtIndex?

我正在 xcode 上写一个应用程序,我正在编写猜测按钮的代码,所以如果用户输入的字母是正确的,那么该字母将出现在单词的位置和长度中在标签中。我正在使用 characterAtIndex,但错误继续发生,我并不真正理解 characterAtIndex 的意义所在。到目前为止,这是我的代码。

@property (weak, nonatomic) IBOutlet UITextField *input;  //user input
@property (weak, nonatomic) IBOutlet UILabel *Guessesinc;  //number of incorrect guesses
@property (weak, nonatomic) IBOutlet UILabel *word;  //the state of word as the user is guessing
@property (weak, nonatomic) NSString *rndw;  //the correct and unknown word 

- (IBAction)Guess;

- (IBAction)Guess
{
    bool match = NO;

    NSRange inputRange;
    char charinput = [input characterAtIndex: 0]; 

    for(int i = 0; i < self.rndw.length; i++)
    {
        char tempString = [self.rndw characterAtIndex: i];
        if (charinput ==tempString)
        {
            match = YES;
            inputRange = NSMakeRange(i, 1); //location, length
            self.word.text = [self.word.text stringByReplacingCharactersInRange: inputRange withString: input];
        }

输入的 characterAtIndex 不起作用,但我不明白为什么。有没有办法解决这个问题。如果这段代码确实 运行 这部分代码应该产生类似 --d- 的结果。因此,例如,如果用户输入了 d 并且正确的单词是代码,则单词标签应该类似于 --d-。这段代码能完成它必须做的事情吗??

这一行:

char charinput = [input characterAtIndex: 0]; 

...错了。

输入是 UILabelUILabel 不是 NSString。你可能想要这样的东西:

NSString *inputString = self.input.text;
if (inputString.length == 0) {
  return; //Don't try to fetch a character from an empty string.
}
char charinput = [input characterAtIndex: 0];

但是,即使那样也没有多大意义,因为输入是一个 UILabel,它是一个仅显示字段,而不是输入字段。如果您尝试从用户那里收集文本,您需要 UITextFieldUITextView。要从用户那里收集一行文本,UITextField 可能就是您想要的。

也不清楚为什么您首先尝试从输入 UILabel 中的索引 0 中获取字符,然后再尝试从您从未见过的字符串 self.rndw 中获取字符初始化。我想 rdnw 是用户应该猜的词吗?

这个回答做了几个猜测:

  1. input 文本字段包含用户为当前猜测输入的字母。
  2. word 标签显示了用户猜测时暴露单词的当前状态。
  3. rndw 是用户正在尝试猜测的当前单词。

鉴于您的代码的这些假设,您的 Guess 方法很接近。看来你最大的问题是试图从 input 文本字段中获取第一个字母。您正在尝试在 UITextField 上调用 characterAtIndex:,而不是在字段的 text 属性(即 NSString)上调用。您还试图用 UILabel.

替换子字符串

这是您的 Guess 方法,稍作改动和清理。另请注意,标准约定变量和方法名称以小写字母开头,class 名称以大写字母开头。

- (IBAction)guess
{
    bool match = NO;

    unichar charinput = [self.input.text characterAtIndex:0]; 

    for (NSInteger i = 0; i < self.rndw.length; i++)
    {
        char tempChar = [self.rndw characterAtIndex:i];
        if (charinput == tempChar)
        {
            match = YES;
            NSRange inputRange = NSMakeRange(i, 1); //location, length
            self.word.text = [self.word.text stringByReplacingCharactersInRange:inputRange withString:self.rndw.substringWithRange:inputRange];
        }