characterAtIndex只需要用于NSString吗? characterAtIndex的主要目的是什么?

时间:2017-06-01 23:14:04

标签: ios objective-c string-length

我正在写一个关于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-。这段代码是否适用于它必须做的事情?

2 个答案:

答案 0 :(得分:0)

这一行:

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。为了收集来自usr的单行文本,UITextField可能是你想要的。

还不清楚为什么你首先尝试从输入UILabel中的索引0获取字符,然后尝试从字符串self.rndw中获取您似乎永远不会看到的字符初始化。我猜rdnw是用户应该猜的词?

答案 1 :(得分:0)

这个答案做了一些猜测:

  1. input文本字段包含用户为当前猜测输入的字母。
  2. 当用户猜测时,word标签会显示公开字词的当前状态。
  3. rndw是用户试图猜测的当前字词。
  4. 鉴于您对代码的假设,您的Guess方法已接近尾声。您最大的问题似乎是尝试从input文本字段获取第一个字母。您正试图通过characterAtIndex:而不是字段UITextField属性(text)来呼叫NSString。您还尝试使用UILabel替换子字符串。

    这是您的Guess方法,只需进行一些小的更改和清理。另请注意,标准惯例是变量和方法名称以小写字母开头,类名以大写字母开头。

    - (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];
            }