2014-06-13 16 views
51

Tôi có nên đặt tên lớp Swift là một tiền tố ba chữ cái theo đề nghị của Objective-C Conventions: Class Names Must Be Unique Across an Entire App?Swift: Tiền tố lớp cần thiết?

+0

Bây giờ Apple thậm chí đã loại bỏ tiền tố 'NS' cho các lớp như' NSNotificationCenter' khi được sử dụng trong Swift. Tuy nhiên, họ vẫn giữ tiền tố cho 'NSObject', đó là lý do tại sao tất cả chúng ta đều có nhiều niềm vui ở đây. –

Trả lời

61

Không, you do not need class prefixes in Swift, bởi vì lớp học được đặt tên theo mô-đun mà chúng sinh sống.

Nếu bạn cần để disambiguate giữa (ví dụ) một Array từ Swift và một Array lớp/struct mà bạn đã khai báo trong ứng dụng của bạn, bạn có thể làm như vậy bằng cách gõ nó như là một Swift.Array hoặc một MyProject.Array. Điều đó cũng hoạt động với các tiện ích mở rộng:

extension Swift.Array { 
    ... 
} 

extension MyProject.Array { 
    ... 
} 
+6

Điều này có thực hiện nếu bạn nhập vào mục tiêu c? – Jeef

+1

@Jeef [Câu trả lời Stackoverflow] (http://stackoverflow.com/a/26148391/2067021) dường như chỉ ra rằng có thể đặt tên các xung đột khi các lớp được nhập vào Objective-C. – user2067021

+1

Vì bạn chọn tên lớp khi xuất bằng thẻ '@ objc', tôi nghĩ bạn nên làm cả hai, vì vậy trong Swift' SimpleAlert' sẽ trở thành 'DRSimpleAlert' –

14

Không, tiền tố chắc chắn không được neeeded.

Giả sử ứng dụng của bạn có tên MyApp và bạn cần khai báo tùy chỉnh UICollectionViewController.

Bạn không cần tiền tố và lớp con như thế này:

class MAUICollectionViewController: UICollectionViewController {} 

Làm điều đó như thế này:

class UICollectionViewController {} //no error "invalid redeclaration o..." 

Tại sao?. Vì những gì bạn khai báo được khai báo trong mô-đun hiện tại, là mục tiêu hiện tại của bạn hiện tại. Và UICollectionViewController từ UIKit được khai báo trong mô-đun UIKit.

Cách sử dụng nó trong mô-đun hiện tại?

var customController = UICollectionViewController() //your custom class 
var uikitController = UIKit.UICollectionViewController() //class from UIKit 

Cách phân biệt chúng với mô-đun khác?

var customController = MyApp.UICollectionViewController() //your custom class 
var uikitController = UIKit.UICollectionViewController() //class from UIKit 
Các vấn đề liên quan