Swift 3.0 Coding Standard

Bài viết được tham khảo từ nhiều nguồn nên có thể chưa được đầy đủ, rất mong có sự bổ sung từ bạn đọc

1. Naming

1.1 Đặt tên với vai trờ và mục đích rõ ràng dễ hiểu

Class, Method, và các biến instance ... đều cần được đặt tên với vai trò và mục đích rõ ràng. Các biến bên trong Method hoặc những biến sử dụng trong phạm vi hẹp thì có thể đặt tên ngắn gọn giản lược cũng được

1.2 Camel case

Class, Method sử dụng chữ hoa để bắt đầu, còn các method, biến, định nghĩa, case .. bắt đầu bằng chữ cái thường

1.3 Không viết prefix

Phần ẩn (implicit) đã được setting ở Namespace rồi nên không cần viết prefix nữa

2. Type

2.1 Khỉ sử dụng kiểu Optional → sử dụng if let / guard let / Nil Coalescing Operator (a ?? b)

Force Unwrap về cơ bản không được sử dụng, trừ trường hợp như IBOutlet

if_let

if let unwrap = optional {
    // xử lý sau khi unwrap
} else {
    // xử lý khi unwrap thất bại
}

guard

guard let selected = tableView.indexPathsForSelectedRows else { return }

Nil_Coalescing_Operator(a??b)

func someMethod(intArray: [Int]?) {
    let value = intArray ?? [Int]()
    // xử lý gì đó ...
}

IUO Attribute

@IBOutlet weak var someView: UIView!

2.2 Khi sử dụng Downcast ta sử dụng as?

Không sử dụng as! trừ trường hợp các biến mà giá trị đầu bắt buộc phải nhập như các biến IBOutlet thì sử dụng as! cũng được

3. Classes

3.1 self được giản lược khi access vào các property và method

Xcode sử dụng màu sắc để phân biệt các biến local rồi nên ko cần sử dụng self nữa

3.2 không cần định nghĩa delegate ở SubClass

Vì khi định nghĩa delegate ở Class mới, khó kiểm soát các vấn đề

3.3 ReadOnly property không cần viết keyword get

Ta không cần viết get ở các property ReadOnly nữa nên có thể giản lược đi được

class SomeClass: NSObject {
    var base: Float = 10.0
    var twice: Float {
        return base * 2
    }
}

4. Functions

4.1 Khi định nghĩa Method, Label được giản lược

Về cơ bản thì Label sẽ được giản lược đi khi định nghĩa Method, UnderBar cũng không cần viết . Khi gọi hàm label được viết

// defenition
func someMethod(first: Bool, second: Int) {
    // do something
}

// call
someMethod(first: true, second: 10)

5 Comments

HeaderComment giản lược

ClassHeader, MethodHeader được giản lược đi, với mục tiêu chỉ cần name là đã có thể hiểu được mục đích, vài trò trong Class, Method. Tuy nhiên nếu vẫn cần viết Header thì ta ko dùng /* */ nữa mà sử dụng ///

/// 2倍した値を返す
/// - parameter base: 2倍される値
/// - returns: 2倍した結果
func twice(base: Float) -> Float {
    return base * 2
}

6. Formating

6.1 sau dấu phẩy cần có dấu cách (space)

let title = NSLocalizedString("someTitle", comment: "")

6.2 Dấu hai chấm ở phần chỉ định kiểu , đằng trước không có dấu cách, đằng sau cần 1 dấu cách

let someNumber: Int = 10
6.3 Ở câu lệnh điều khiển viết gộp lại 1 dòng thì ở trước và sau dấu "{" và dấu "}" cần một dấu cách
guard let unwrap = optional else { return }

7. File Structures

protocolextension về cơ bản nên được viết riêng sang file khác

8. References

Swift.org API Design Guidelines github/swift-style-guide raywenderlich/swift-style-guide recruit-lifestyle/swift-style-guide

Nguồn: Qiita