2014-10-29 2 views
5

우리는 클래스 WayPoint을 가지고 있습니다. 그러나 어느 시점에서 우리는 클래스 이름을 Placemark으로 변경하기로 결정했습니다. 그러나 기존 코드를 많이 수정하게되므로 클래스의 이름을 변경하고 싶지는 않습니다. 따라서 헤더 파일 하단에 typedef 한 줄을 추가하고 그 이후로 새 코드에서 Placemark을 사용하기 시작했습니다.Objective-C에서 다른 종류의 심볼로 재정의

@interface WayPoint : _WayPoint 
@end 
typedef WayPoint Placemark; 

하지만 아직 이해할 수없는 것이 하나 있습니다. 다른 헤더 파일에서 앞으로 정의를 사용하려고하면. I에만 사용할 수 있습니다

@class WayPoint; 

내가 사용하는 경우 :

@class Placemark; 

내가 오류 메시지가 얻을 것이다 : 기호의 다른 종류로 '위치 표시'의

재정을

왜?

+1

흥미로운 질문, 저의 답은 대안을 제시합니다. 봇은 질문에 대답하지 않습니다. 내가 추측 할 수있는 점이 있지만 여기에 올릴 수는 없습니다. 낮은 수준의 세부 사항에 대해서도 궁금합니다. –

답변

6

왜 Xcode의 리팩토링 기능을 사용할 수 없는지 잘 모르겠습니다 (단순 이름 변경은 쉽고 빠르게 수행합니다). 하지만 정말로 이것을하고 싶다면 typedef를 더 잘 사용할 수 있습니다 :

@compatibility_alias Placemark WayPoint 
+1

이유는이 클래스가 핵심 데이터에 의해 자동으로 생성되기 때문입니다. 나는 그것을 리팩토링하는 것이 안전한지 확실하지 않다. 그러나 좋은 지적. 이것 좀 봐. –

+1

@YuchenZhong 자격 설정에서 클래스를 업데이트하는 경우도 있습니다. 빠른 검색 결과는 다음과 같습니다. http://stackoverflow.com/a/1359960/1032151 –

5

typedef 위치 표시가 별칭이므로 클래스 기호로 사용하려고합니다.

그래서 오류가 명확 클래스 이름과 형식 정의 별명이 서로 다른 기호 의미 기호 의 다른 종류로 '위치 표시'의 재정을 나타냅니다.

+0

typedef WayPoint Placemark; 객체가 아니라 WayPoint의 별칭 일뿐입니다. –

+0

고마워했습니다. –