2016-05-17 26 views
6

tôi có hai lựa chọn khi thực hiện giao thức phù hợp trong Swift, với kết quả cuối cùng:Nơi triển khai giao thức Swift?

  • Thực hiện các giao thức trong lớp - có nghĩa là, nhà nước phù hợp ở phía trên cùng của định nghĩa lớp, và đưa thi bên trong thân lớp hoặc
  • Triển khai giao thức trong tiện ích - tức là, mã hóa sự tuân thủ giao thức hoàn toàn bên ngoài lớp học.

Dưới đây là một ví dụ:

public class MyClass : CustomDebugStringConvertible { 
    ... // Something 
    public var debugDescription : String { 
     return "MyClass" 
    } 
} 

vs

class MyClass { 
    ... // Something 
} 
extension MyClass : CustomDebugStringConvertible { 
    public var debugDescription: String { 
     return "MyClass" 
    } 
} 

mẫu mã trong cuốn sách Swift có xu hướng tập trung vào các phương pháp tiếp cận đầu tiên; Apple's source code of Swift core cho thấy rằng họ chỉ sử dụng phương pháp thứ hai (xem BoolOptional để biết ví dụ).

Có cách nào âm thanh để quyết định giữa hai cách tiếp cận tùy thuộc vào tình huống hay đơn giản là vấn đề tùy chọn mã hóa?

+2

Nó hoàn toàn là một vấn đề ưu tiên, và do đó là một vấn đề của ý kiến. Cá nhân tôi gần như luôn luôn làm thứ hai, nhưng không hoàn toàn luôn luôn. Xem thêm nhận xét của tôi về tiện ích tại đây: http://www.apeth.com/swiftBook/ch04.html#_extending_object_types – matt

Trả lời

4

Đó là vấn đề về tùy chọn mã hóa và khả năng đọc. Nếu bạn nghĩ rằng lớp học của bạn sẽ trở nên khổng lồ, nó có thể có ý nghĩa hơn để thực hiện nó trong một phần mở rộng để các phương thức của nó không thêm lộn xộn vào lớp của bạn. Nếu nó là một lớp học ngắn, tôi sẽ nói tất cả trong một, bởi vì khả năng đọc ít bị ảnh hưởng.

4

Tôi thấy phần lớn là tùy chọn mã hóa. Trong nhóm của tôi ở đây chúng tôi đã bắt đầu áp dụng cách tiếp cận thứ hai. Lúc đầu, tôi nghĩ rằng nó là một sử dụng kỳ lạ của phần mở rộng nhưng tôi đã đến để thích nó. Nó giữ các phương thức thực hiện của một giao thức độc đáo với nhau và tạo ấn tượng rằng chính lớp đó nhỏ hơn (chỉ là quang học thực sự). Tôi có thể thấy một số biến chứng hoặc cơ hội cho sự nhầm lẫn nếu, nói, lớp học có một tableview và bạn sử dụng phần mở rộng để thực hiện các nguồn dữ liệu và đại biểu. Nếu ai đó sau đó phân lớp lớp đó, họ có thể không biết về tiện ích và thấy hành vi không mong muốn.

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