2014-06-13 12 views
18

Được coi là kỹ thuật kém để tạo nhiều lớp học trong một tệp swift hoặc tốt nhất là tạo tệp swift riêng biệt cho mỗi lớp?Có thể chấp nhận tạo nhiều lớp trong một tệp .swift hay tôi nên tạo riêng một tệp .swift riêng biệt cho mỗi lớp?

Ví dụ, mà là tốt hơn:

A. Nhiều lớp trong ViewController.swift:

1. alpha.swift:

class alpha: UIViewController { ... } 
class beta: UIWebView { ... } 
class gamma: UINavigationController { ... } 

B. file .swift riêng cho mỗi lớp:


1. Trong alpha.swift:

class alpha: UIViewController { ... } 

2. Trong beta.swift:

class beta: UIWebView { ... } 

3. Trong gamma.swift:

class gamma: UINavigationController { ... } 

Trả lời

10

Đó không phải là kỹ thuật kém, IF các lớp được kết nối.

Để quyết định xem chúng có được kết nối không, hãy hỏi: Có thể sử dụng một lớp học không có lớp học khác không?

Nếu có, thì bạn nên có hai tệp khác nhau, vì bạn có thể chỉ cần sử dụng một trong hai tệp.


Ví dụ: trong C++, bộ sưu tập có lớp bên trong cho trình lặp của chúng. (Tôi biết đó là một ví dụ C++, nhưng câu hỏi không thực sự liên quan đến ngôn ngữ).

Mặc dù nếu các lớp không có gì để làm với nhau (trên cùng một chế độ xem không được tính), thì mỗi lớp nên có các lớp riêng biệt.

26

Câu trả lời ngắn: tùy thuộc vào.

Câu trả lời dài:
Nếu bạn có các lớp ngắn được gắn chặt với nhau, bạn nên đặt cùng một tệp.
Nếu bạn có các lớp học dài, không liên quan, thì bạn nên đặt chúng vào các tệp khác nhau.

+0

câu trả lời ngắn và hoàn hảo. Mặc dù câu trả lời ở trên cũng tốt. – iAnurag

4

Tôi có câu trả lời khác cho câu hỏi này dựa trên việc gỡ lỗi và tìm kiếm trên internet trong vài ngày qua. Tôi là C++ dev với hơn 15 năm kinh nghiệm. Đến từ ngôn ngữ này, tôi quen thuộc với một số kỹ thuật thiết kế cần truy cập protected. Kể từ khi Swift không hỗ trợ nó và khi nó quay ra họ sẽ không hỗ trợ nó trong tương lai gần, tôi đã bắt đầu sử dụng truy cập private và viết vài lớp trong cùng một tệp.Bằng cách đó, tôi đã giải quyết thiếu sửa đổi protected (các hàm riêng có thể nhìn thấy trong cùng một tệp, vì vậy chúng sẽ hiển thị cho tất cả các lớp trong cùng một tệp và nếu các lớp này có nguồn gốc thì lớp riêng tư thực sự hoạt động như được bảo vệ). Vâng tất cả mọi thứ là tốt và tôi đã hạnh phúc trước khi phát hiện ra rằng ứng dụng của tôi bị rơi với mã EXC_BAD_ACCESS = 1 ... Các trường hợp ngoại lệ không phải vì mã của tôi, đó là bởi vì nó bố trí của các thành viên bằng cách nào đó sai. Ví dụ nếu tôi gọi một hàm a() từ lớp dẫn xuất thông qua biến mẫu, thì hàm func b() được gọi. B() cũng là thành viên của cùng một lớp và được định nghĩa trước a(). Đó là lý do tại sao một số chức năng ném ngoại lệ truy cập xấu. Con trỏ phiên bản bị hỏng. Sau khi tôi chuyển tất cả 3 lớp sang các tệp độc lập, mọi thứ đều ổn.

Không chắc chắn đây là lý do thực sự hoặc tôi đã làm điều gì đó sai, nhưng không phải 100% trường hợp khi bạn xác định nhiều lớp trong cùng một tệp sẽ có hành vi được xác định. Có thể đó là vấn đề trình biên dịch, Swift là ngôn ngữ trẻ và thậm chí tôi đang thử nghiệm với studio Gold Master được cho là ổn định, vẫn còn rất nhiều lỗi.

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