
Objective - C 에는 기존 데이터 타입에 새로운 이름을 부여하는데 사용하는 키워드가 있는데 그게 바로 typedef 임.
// [기존 타입] [별칭]
typedef NSString * MyString;
// 반환 (^블럭별칭)(매개변수)
typedef void(^DoneBlock)(NSString *);
@interface BlockTest : NSObject
{
MyString name;
// 매개변수 X, 반환 X 인 블럭함수 입니다. - 자료형
// 반환 (^블럭이름)(매개변수);
void (^simpleBlock)(void);
- (void)functionWithBlockParam:(DoneBlock)done;
- (void)functionWithBlockParam2:(void (^)(NSString *))done;
typedef struct {
float x;
float y;
} Point;
Point point;
point.x = 10.0;
point.y = 20.0;
typedef void (^CompletionBlock)(BOOL success);
CompletionBlock block = ^(BOOL success) {
if (success) {
NSLog(@"Success!");
} else {
NSLog(@"Failure!");
}
};
@class MyClass;
typedef MyClass *MyClassRef;
MyClassRef myObject = [[MyClass alloc] init];
Objective-C에서 struct는 여러 개의 변수(필드)를 그룹화하여 하나의 복합 데이터 타입을 정의하는 데 사용됩니다.
struct는 주로 관련된 데이터를 하나의 단위로 묶어 관리할 때 유용합니다.
왜냐하면, Swift 의 struct 와는 달리, Objective-C 의 struct 는 Method 를 가지지 못하기 때문!!
// 구조체 정의 - typedef 사용 x
struct Ppakcoder {
NSString *name;
NSInteger age;
};
// 구조체 정의 - typedef 사용 o - -> 이 방법 많이 사용함.
typedef struct {
NSString *name;
NSInteger age;
} Dog;
struct Ppakcoder aPpakcoder;
aPpakcoder.name = @"김준우";
aPakcoder.age = 10;
Dog aDog;
aDog.age = 10;
aDog.name = @"댕댕이";
// &myDog : 해당하는 구조체의 주소 값을 가져올 때 사용
Dog *myDogRef = &myDog;
// -> 포인터에 접근한다는 뜻
NSString * myDogName = myDogRef->name;
NSString * checkMyDogName = myDogRef->name = @"멍뭉이";