나는 데이터를 저장하는 두 개의 클래스 (class1과 class2)가 있으며 메소드는 없다. 일부 사용자 입력에 따라 두 클래스 중 하나에 설정되는 인스턴스 변수가있는 세 번째 클래스가 있습니다. 그래서, 세 번째 클래스에서 나는어떻게 인스턴스 변수를 동적으로 정의합니까?
NSObject *aClass;
로 일반적으로 변수를 선언하고 런타임 중에 그것이 있어야 무엇으로 설정합니다. 그러나
aClass = [[Class1 alloc] init]; // or
aClass = [[Class2 alloc] init];
, 내가 aClass
NSString *str = aClass.field1;
에서 필드에 액세스하려고 할 때 그것은 나에게 오류를 제공합니다 : 멤버 '필드 1'에 대한 요청을 뭔가 아닌 구조 또는 노동 조합. Field1은 class1과 class2에서 모두 선언됩니다. 내가 캐스트를하려고 할 때
aClass = (Class1 *) aClass;
같은 오류가 발생합니다. 내가 뭘 잘못하고 있는데, 더 좋은 방법이 있을까?
감사합니다, 나는 점 표기법과 재산 방법을 사용하여 사이에 차이가 몰랐어요 이 문제에 관해서. 비록 그것을 직접 얻기 위해, aClass.field는 필드에 직접 접근합니다. 즉, [aClass field]가 메소드를 호출하는 동안 메서드가 호출되지 않았 음을 의미합니까? – Moses
@ 모세 : 불행히도 그 행동은 그보다 덜 일관 적입니다. ObjC의 객체는 포인터입니다. 필드에 직접 액세스하려면'-> '연산자가 필요합니다.컴파일 타임에 유형을 판별 할 수없는 경우 속성이 실패하는 이유를 모르겠습니다. 속성 가져 오기 또는 설정은 실제로 메서드 호출이며 동일한 작업에 대한 도트 구문을 사용하지 않는 것이 완벽하게 작동합니다. 즉, aClass.field와 aClass 필드 모두 같은 일을해야합니다. 컴파일러가 객체의 유형을 알고있을 때만 첫 번째는 작동합니다. – zneak