[英]Create a custom getter for an Objective-C property
我刚刚开始学习Objective-C,然后我开始制作一个基本程序来创建一个人并打印出其名字。 但是,它不起作用。 您认为我犯了什么菜鸟错误?
main.m:
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[])
{
Person *Bob;
[Bob setFirstName:@"John"];
[Bob setLastName:@"Smith"];
NSLog(@"%@", [Bob fullName]);
}
人.h:
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
NSString *firstName;
NSString *lastName;
}
- (void) setFirstName: (NSString*)input;
- (void) setLastName: (NSString*)input;
- (NSString*) firstName;
- (NSString*) lastName;
- (NSString*) fullName;
@end
人.m:
#import "Person.h"
@implementation Person
// Getters
- (NSString*) firstName
{
return firstName;
}
- (NSString*) lastName
{
return lastName;
}
- (NSString*) fullName
{
return [NSString stringWithFormat:@"%@ %@", firstName, lastName];
}
// Setters
- (void) setFirstName:(NSString *)input
{
firstName = input;
}
- (void) setLastName:(NSString *)input
{
lastName = input;
}
@end
注意:此问题最初是在Code Review StackExchange上提出的,但他们将其关闭了:-(
它不起作用的原因是因为您从未正确分配Person
对象。
注意,您从未说过Bob = [[Person alloc]init];
。 Objective-C消息传递对空指针没有任何作用,因此这就是为什么您没有得到NullPointer
类的原因的原因。 它只是默默地被忽略。
对于诸如firstName
和lastName
类的@property
,您无需创建设置器和获取器,这是自动完成的。 对于自定义的setter和getter,您将需要创建它们,例如fullName
属性。 您还需要分配和初始化Person
类。 下面的示例应该起作用:
主目录
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *bob = [[Person alloc] init];
bob.firstName = @"Bob";
bob.lastName = @"Williams";
NSLog(@"Full name is %@",bob.fullName);
}
return 0;
}
人
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property (copy,nonatomic) NSString *firstName;
@property (copy, nonatomic) NSString *lastName;
@property (copy, nonatomic) NSString *fullName;
@end
人
#import "Person.h"
@implementation Person
- (NSString *)fullName {
return [NSString stringWithFormat:@"%@ %@", self.firstName, self.lastName];
}
@end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.