我正在尝试为一个名为“word”的新类编写一个方法,该类是NSString的子类。我想要一个接受包含单个字符的NSString的方法,并返回该字符串的每个实例的单词中的位置。到目前为止我有这个:
@implementation Word
-(NSMutableArray *)placeOfLetter: (NSString *)letterAsked;{
NSUInteger *len=(NSUInteger *)[self length];
int y=0;
char letter=(char)letterAsked;
for (NSUInteger *x=0; x<len; x++) {
if ([self characterAtIndex:*x]==letter){
[matchingLetters insertObject:x atIndex:y];
y++;
}
}
}
@end
然而,xcode告诉我,我不能把x作为insertObject的参数,因为“不允许从NSUInteger到id的隐式转换。我怎么能解决这个问题呢?
答案 0 :(得分:2)
您遇到的问题主要源于您将NSUInteger
视为指针;你还有一些其他的铸造问题。请尝试以下方法:
letterAsked
参数获取完整字符串,而是从中获取char
,只需获取char
(或unichar
)作为参数首先。您完全避免了letter = (char)letterAsked
转换。不要使len
成为指针。您可能根本不需要声明len
。考虑编写for
循环,如:
for(NSUInteger x = 0; x < [self length]; x++) { // ...
这也可以帮助您进行-characterAtIndex:
通话;您不再需要取消引用x
才能获得角色。
就像Hot Licks在评论中所说,如果你想在NSArray中找到一个位置,请使用NSNumber;你需要数字作为类实例进入NSArray实例。您可以像x
这样创建一个NSNumber:
NSNumber * foundPosition = [NSNumber numberWithUnsignedInteger:x];
考虑使用NSMutableArray的-addObject:
方法,而不是跟踪y
并每次递增它。你会得到相同的结果。
答案 1 :(得分:1)
NSUInteger
is a typedef
for either unsigned int
or unsigned long
, depending on your platform.它不是对象类型。因此,当您声明NSUInteger *x=0
时,您将x
声明为指向无符号整数的指针,并将其初始化为null。
insertObject:atIndex:
需要NSUInteger
,而不是NSUInteger*
作为index
参数。
只需从*
语句和for
消息中取出characterAtIndex:
。
您的方法中也存在其他问题,例如将letterAsked
投射到char
而不是使用characterAtIndex:
将角色取出,并将len
声明为指针。