Một thể loại có thể thực hiện một giao thức trong Mục tiêu C không?


88

Tôi có một danh mục trên NSDate và sẽ rất tiện lợi nếu nó có thể triển khai một giao thức mà tôi đã tạo trước đó. Điều này có khả thi không? cú pháp chính xác cho điều này là gì?

Câu trả lời:


144

Vâng, điều đó có thể. Cú pháp là:

@interface NSDate (CategoryName) <ProtocolName>
@end

@implementation NSDate (CategoryName)
@end

Đây là tài liệu của Apple về chủ đề này.

Cũng có thể thực hiện việc này bằng cách sử dụng tiện ích mở rộng lớp. Tôi rất thích điều này để tuân theo các giao thức ủy quyền một cách riêng tư. Làm như vậy sẽ ẩn chi tiết triển khai của việc trở thành đại biểu của một số lớp khỏi giao diện công khai và xóa phần phụ thuộc khỏi tiêu đề.


Thật tệ là không có cách nào để di chuyển khai báo giao thức đến việc triển khai danh mục lớp.
adib

@adib Đó là những gì mở rộng lớp dành cho.
Nikolai Ruhe,

@ bikram990 Tài liệu đã bị gỡ bỏ và hiện nằm trong phần kế thừa. Tôi đã cập nhật liên kết.
Nikolai Ruhe

tiếc là chúng tôi không thể khai báo các biến Ví dụ trong các thể loại, mà chúng ta có thể cần cho một số triển khai giao thức đại biểu
yasirmturk

@yasirmturk Bạn có thể làm điều đó bằng objc_setAssociatedObject :)
animaonline
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.