【问题标题】:Can I give a property an alternate key name in Objective-C?我可以在 Objective-C 中给属性一个备用键名吗?
【发布时间】:2020-10-06 05:09:09
【问题描述】:

我能否为 Objective-C 类中的属性指定一个备用名称,以便我可以使用与其属性名称不同的键来设置该属性?这是一些示例代码。

@interface Address : NSObject
@property (strong, nonatomic) NSNumber *apartmentNumber;
@end

// ...

Address *address = [Address new];
address setValue:@(123) forKey:@"apartmentNumber"];

是否可以使用像 "apt" 这样的备用键名来访问此属性?

Address *address = [Address new];
[address setValue:@(123) forKey:@"apt"];

【问题讨论】:

标签: objective-c kvc


【解决方案1】:

你可以实现一个自定义的setter方法:

- (void)setApt:(NSNumber *)apt {
    
    self.apartmentNumber=apt;
}

如果需要,还有一个吸气剂:

- (NSNumber *)apt {
    
    return self.apartmentNumber;
}

【讨论】:

    【解决方案2】:

    根据反馈,这似乎无需编写任何其他方法即可工作。

    @interface Address : NSObject
    @property (strong, nonatomic, getter=apt, setter=setApt:) NSNumber *apartmentNumber;
    @end
    

    【讨论】:

    • 可以通过阅读我的书发现这一点:apeth.com/iOSBook/ch12.html#_property_declaration_syntax 请注意,您现在没有 apartmentNumber 方法(getter 或 setter),如果有人试图调用其中一个方法,以后可能会造成麻烦明确地。所以这不是一个“替代”名称;它是的名字。 Gerd K 方法的优势在于您现在拥有两个 名称。
    • 感谢您的链接!无论我将属性称为self.aptself.apartmentNumber 还是使用键名aptapartmentNumber,它都可以这样工作。
    • 是的,你是对的!我不知道为什么会这样。 :) 我注意到的另一件事是,对于 Swift 互操作性,此属性显示为 apartmentNumber,而不是 apt。你可能不在乎。
    猜你喜欢
    • 2011-04-25
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多