概要
Objective-Cの基本文法をまとめていく。
環境
OSX El Capitan 10.11.4
Xcode 7.3
クラスの基本
MyClass.h
# import <Foundation/Foundation.h>
@interface MyClass : NSObject {
NSString* message; //メッセージを保管するプロパティ
}
-(void)setMessage:(NSString*)str; //メッセージをセットする
-(NSString*)message; //メッセージを取り出す
-(void)printMessage; //メッセージを出力する
@end
MyClass.m
# import "MyClass.h"
@implementation MyClass
-(void)setMessage:(NSString*)str{
message = str; //strで受け取った値をセットする
}
-(NSString*)message {
return message; //インスタンス変数を返す
}
-(void)printMessage {
NSLog(@"%@",message); //messageはインスタンス変数なので%@で出力する
}
@end
main.m
# import <Foundation/Foundation.h>
# import "MyClass.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
MyClass* obj = [[MyClass alloc] init]; //インスタンスを作る
[obj setMessage:@"Hello world"]; //メッセージをセットする
[obj printMessage]; //メッセージを出力する
}
return 0;
}
継承
MyClass.h
# import <Foundation/Foundation.h>
@interface MyClass : NSObject {
@protected
NSString* message;
}
+(MyClass*)MyClassWithMessge:(NSString*)str;
-(void)setMessage:(NSString*)str;
-(NSString*)message;
-(void)printMessage;
@end
//継承関係はヘッダーファイルを見る必要がある
@interface PowerMyClass : MyClass {
@protected
NSString* message2;
}
+(PowerMyClass*)PowerMyClassWithMessge:(NSString*)str andMessage2:(NSString*)str2;
-(void)setMessage2:(NSString*)str;
-(NSString*)message2;
@end
MyClass.m
# import "MyClass.h"
@implementation MyClass
+(MyClass*)MyClassWithMessge:(NSString*)str{
MyClass* obj = [[self alloc] init];
[obj setMessage:str];
return obj;
}
-(void)setMessage:(NSString*)str{
message = str;
}
-(NSString*)message {
return message;
}
-(void)printMessage {
NSLog(@"%@",message);
}
@end
@implementation PowerMyClass
+(PowerMyClass*)PowerMyClassWithMessge:(NSString*)str andMessage2:(NSString*)str2 {
id obj = [super MyClassWithMessge:str];
[obj setMessage2:str2];
return obj;
}
-(void)setMessage2:(NSString*)str {
message2 = str;
}
-(NSString*)message2 {
return message2;
}
-(void)printMessage {
NSLog(@"%@ %@",message, message2);
}
@end
main.m
# import <Foundation/Foundation.h>
# import "MyClass.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
/*
MyClass* obj = [[MyClass alloc] init];
[obj setMessage:@"Hello world"];
[obj printMessage];
*/
//MyClass* myClass = [MyClass MyClassWithMessge:@"hello world"];
id myClass = [MyClass MyClassWithMessge:@"first"];
[myClass printMessage];
id myClass2 = [PowerMyClass
PowerMyClassWithMessge:@"second" andMessage2:@"test"];
[myClass2 printMessage];
}
return 0;
}