自定义功能未返回正确的值

时间:2016-06-15 16:42:13

标签: c++ ios objective-c macos function

我有一个代码来创建我自己的函数,但它给了我一个警告:

  • 不兼容的整数到指针转换从'int'分配给'SMUserKey *'(又名'unsigned long *')
  • 不兼容的整数到指针转换将'SMUserKey'(又名'unsigned long')发送到'SMUserKey *'类型的参数(又名'unsigned long *')

所以它显示出警告,我想摆脱它们。

这是我的.h代码:

typedef NSUInteger SMUserKey;


NS_ENUM(SMUserKey) {
    SMUsername = 1,
    SMFirstName = 2,
    SMLastName = 3,
    SMFullName = 4,
    SMEmail = 5,
};

这是我的.m代码:

-(void)awakeFromNib {
    NSString *result = [SMUser getValueForKey:SMUsername];
    NSLog(@"THE RESULT: %@", result);
}

+ (NSString *)getValueForKey:(SMUserKey*)myUserKey {
    NSString *myUserKeyValue = nil;
    if (myUserKey == 1) {
        myUserKeyValue = @"Username";
    }
    if (myUserKey == 2) {
        myUserKeyValue = @"First Name";
    }
    if (myUserKey == 3) {
        myUserKeyValue = @"Last Name";
    }
    if (myUserKey == 4) {
        myUserKeyValue = @"Full Name";
    }
    if (myUserKey == 5) {
        myUserKeyValue = @"Email";
    }
    return myUserKeyValue;
}

这是显示警告的图片:

Click here to see the image

4 个答案:

答案 0 :(得分:1)

条件检查应该是if (myUserKey == 1)而不是(myUserKey = 1),对其余部分进行相同的修改。

答案 1 :(得分:1)

只需使用switch case发布另一种方法,

+ (NSString *)getValueForKey:(SMUserKey*)myUserKey {
NSString *myUserKeyValue = nil;

switch (SMUserKey) {
    case 1:
    {
        myUserKeyValue = @"Username";
        break;
    }
    case 2:
    {
        myUserKeyValue = @"First Name";
        break;
    }
    case 3:
    {
        myUserKeyValue = @"Last Name";
        break;
    }
    case 4:
    {
        myUserKeyValue = @"Full Name";
        break;
    }
    case 5:
    {
        myUserKeyValue = @"Email";
        break;
    }

    default:
        break;
}

return myUserKeyValue;

}

答案 2 :(得分:0)

你有枚举名称。 使用它们

+ (NSString *)getValueForKey:(SMUserKey)myUserKey {
    switch(myUserKey) {
    case SMUsername:  return @"Username";
    case SMFirstName: return @"First Name";
    case SMLastName:  return @"Last Name";
    case SMFullName:  return @"Full Name";
    case SMEmail:     return @"EMail";
    default:          return nil;
    }
}

对你的幻数进行硬编码会导致长期的维护问题。

请注意,参数类型应为SMUserKey而不是SMUserKey*

答案 3 :(得分:-1)

这应该这样做。

-(void)awakeFromNib {
    NSString *result = [SMUser getValueForKey:SMUsername];
    NSLog(@"THE RESULT: %@", result);
}

+ (NSString *)getValueForKey:(SMUserKey*)myUserKey {
    NSString *myUserKeyValue = nil;
    if (myUserKey == 1) {
        myUserKeyValue = @"Username";
    }
    if (myUserKey == 2) {
        myUserKeyValue = @"First Name";
    }
    if (myUserKey == 3) {
        myUserKeyValue = @"Last Name";
    }
    if (myUserKey == 4) {
        myUserKeyValue = @"Full Name";
    }
    if (myUserKey == 5) {
        myUserKeyValue = @"Email";
    }
    return myUserKeyValue;
}