2012-04-06 2 views
2

나는 조건부 코드를 피하려고 시간을 낭비하는 것을 너무 많이 생각하고 있습니다. 그래서 물어볼 것이라고 생각했습니다. 나는 이런 종류의 질문을 보았지만 PHP 나 다른 언어를 사용하고 있었다. 나는 이런 식으로 뭔가를 할 수있는 가장 기본적인에서변수에 저장된 클래스 이름을 사용하여 클래스 메서드를 호출합니까?

, (I 구문이 잘못 알고) :

 Class * var = @"Playback_Up"; 
     // call Class method to get default settings 
     NSMutableDictionary * dict = [var getPlaybackDefaults]; 

가 왜이 작업을 수행 할 수 있습니까? 조건부를 피하려면. 나는 재생 "유형"의 범위에서 사용할 수있는 애플 리케이션을 가지고있다 - 각 유형은 "재생"클래스의 서브 클래스에 의해 처리된다. 클래스 이름을 배열에 저장 한 다음 선택한 (tableView에서) 선택하면 해당 클래스를 호출하고 인스턴스를 만듭니다.

이것이 가능한가, 아니면 스스로 파고들 것인가? 여기에 구멍이 있니?

Class var = NSClassFromString(@"Playback_Up"); 

나머지는 괜찮습니다, 나는 더 자주 당신이 상상할 수있는 것보다 기술의이 종류를 사용

답변

5

첫 번째 라인에 대한 올바른 구문입니다.

(를 제외하고 그 "Playback_Up는"물론 클래스의 이름 않을 것입니다.)


편집 : 아래 Paul.s의 의견을 참고 마십시오. 컴파일시에 클래스를 하드 코딩 할 수 있다면 +class을 사용하는 것이 좋습니다.

+2

또는'[Playback_Up class]'는 어떨까요? –

+0

네, 괜찮습니다. (이름이 하드 코딩 된 경우 더 좋습니다.) 'NSClassFromString'은 변수 문자열을 처리 할 수있게 해줍니다. 다른 곳에서 읽는다면 좋을 것입니다. –

+1

@skinnyTOD 약간의 추가 작업'NSStringFromClass ([MyClass class]);를 수행하는 반대 방향으로 가고 있다면 클래스의 이름을 바꾸면 Xcode가 실제로 리펙토링 할 수 있습니다. –

관련 문제