2014-10-29 19 views
5

Chúng tôi có một lớp WayPoint. Nhưng tại một số thời điểm, chúng tôi quyết định đổi tên lớp thành Placemark. Tuy nhiên, chúng tôi không thực sự muốn thay đổi tên của lớp vì nó sẽ dẫn đến nhiều sửa đổi của mã hiện có. Do đó, tôi đã thêm một dòng typedef ở cuối tệp tiêu đề và bắt đầu sử dụng Placemark trong bất kỳ mã mới nào vui vẻ từ đó.Định nghĩa lại như một loại biểu tượng khác trong Mục tiêu-C

@interface WayPoint : _WayPoint 
@end 
typedef WayPoint Placemark; 

Nhưng vẫn còn một điều mà tôi không hiểu. Nếu tôi cố gắng sử dụng định nghĩa chuyển tiếp trong một số tệp tiêu đề khác. Tôi chỉ có thể sử dụng:

@class WayPoint; 

Nếu tôi sử dụng:

@class Placemark; 

tôi sẽ nhận được thông báo lỗi:

Xác định lại của 'Dấu vị trí' như một loại khác nhau của biểu tượng

Tại sao?

+1

Câu hỏi thú vị, câu trả lời của tôi cung cấp giải pháp thay thế, bot không trả lời câu hỏi. Tôi có một số dự đoán, nhưng tôi không chắc chắn để đăng chúng ở đây. Tôi cũng tò mò về chi tiết cấp thấp. –

Trả lời

6

Không chắc chắn lý do tại sao bạn không thể sử dụng các tính năng tái cấu trúc của Xcode (Đổi tên đơn giản thực hiện nhanh chóng và dễ dàng). Nhưng nếu bạn thực sự muốn thực hiện điều này, bạn có thể sử dụng điều gì đó tốt hơn sau đó typedef:

@compatibility_alias Placemark WayPoint 
+1

Lý do là lớp này được tạo tự động bởi Dữ liệu cốt lõi. Tôi không chắc liệu nó có an toàn để tái cấu trúc nó hay không. Nhưng điểm tốt. Tôi sẽ xem xét điều này. –

+1

@YuchenZhong Bạn có thể đoán nó thậm chí sẽ cập nhật lớp học trong cài đặt entitiy. Tìm kiếm nhanh cho phép điều này: http://stackoverflow.com/a/1359960/1032151 –

5

Vì typedef Dấu vị trí là bí danh và bạn đang cố gắng sử dụng nó làm biểu tượng lớp .

Vì vậy, lỗi ghi rõ Xác định lại của 'Dấu vị trí' như một loại khác nhau của biểu tượng có nghĩa là tên lớp và typedef bạn bí danh là biểu tượng khác nhau.

+0

typedef WayPoint Dấu vị trí; không phải là một đối tượng, nó chỉ là một bí danh của WayPoint. –

+0

Đã chỉnh sửa nhờ –

Các vấn đề liên quan