fel*_*hew 0 properties objective-c
我刚刚开始学习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]);
}
Run Code Online (Sandbox Code Playgroud)
Person.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
Run Code Online (Sandbox Code Playgroud)
Person.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
Run Code Online (Sandbox Code Playgroud)
注意:这个问题最初是在Code Review StackExchange上提出的,但他们关闭了它:-(
它无法工作的原因是因为您从未Person正确分配过对象.
注意你从未说过Bob = [[Person alloc]init];.Objective-C消息传递对null指针没有任何作用,所以这就是为什么你没有得到像NullPointer.它只是默默地被忽略了.
对于@property诸如此类firstName,lastName您不需要创建 setter 和 getter,这是自动完成的。对于自定义 setter 和 getter,您需要创建它们,例如属性fullName。您还需要分配和初始化您的Person类。以下示例应该有效:
主程序.m
#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;
}
Run Code Online (Sandbox Code Playgroud)
人.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property (copy,nonatomic) NSString *firstName;
@property (copy, nonatomic) NSString *lastName;
@property (copy, nonatomic) NSString *fullName;
@end
Run Code Online (Sandbox Code Playgroud)
人.m
#import "Person.h"
@implementation Person
- (NSString *)fullName {
return [NSString stringWithFormat:@"%@ %@", self.firstName, self.lastName];
}
@end
Run Code Online (Sandbox Code Playgroud)