Add code organization convention (#26)
* Add guide on comments * Add Casting convention * Add code organization convention * Renamed File Content Ordering to File Organization Co-authored-by: Chen Yang <yangche@microsoft.com>
This commit is contained in:
Родитель
d2e831cc92
Коммит
6f4184934a
|
@ -1,6 +1,6 @@
|
||||||
# File Content Ordering
|
# File Organization
|
||||||
|
|
||||||
## Convention
|
## Convention - Ordering
|
||||||
|
|
||||||
Most "important" stuff at the top; and least "important" stuff at the bottom. The importance is usually determined by the [access level](https://docs.swift.org/swift-book/LanguageGuide/AccessControl.html); the less restrictive the access level, the more "important" it is.
|
Most "important" stuff at the top; and least "important" stuff at the bottom. The importance is usually determined by the [access level](https://docs.swift.org/swift-book/LanguageGuide/AccessControl.html); the less restrictive the access level, the more "important" it is.
|
||||||
|
|
||||||
|
@ -62,6 +62,60 @@ internal func updateUnalliedHouses(_ houses: [House]) {
|
||||||
private maximumHouseSize: Int = 50
|
private maximumHouseSize: Int = 50
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Convention - Grouping
|
||||||
|
Use `// MARK: Some text comment` to group related methods into sections. For example, in a view controller class, there might be `Setup`, `Layout`, and `Event Handlers` sections.
|
||||||
|
When marking a section of methods belonging to a superclass or a protocol, use the actual name of the superclass or protocol type instead of a loose translation. If there are multiple protocols, methods should be grouped by individual protocols. Note: this convention only applies to protocol adoption without extensions because the keyword `extension` will automatically put the protocol section in its own group.
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
Grouping related methods into sections help with code organization and navigation.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
``` swift
|
||||||
|
|
||||||
|
// bad: does not use the name of the protocol as the name of the section
|
||||||
|
// MARK: - Table view delegate
|
||||||
|
...
|
||||||
|
|
||||||
|
// good: use the name of the protocol directly as the name of the section
|
||||||
|
// MARK: - UITableViewDelegate
|
||||||
|
...
|
||||||
|
|
||||||
|
// bad: using the same section for UITableViewDelegate and UITableViewDataSource protocols
|
||||||
|
|
||||||
|
// MARK: - UITableViewDelegate and UITableViewDataSource
|
||||||
|
|
||||||
|
public func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
|
public func numberOfSections(in tableView: UITableView) -> Int {
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
|
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
|
// good: using different sections for UITableViewDelegate and UITableViewDataSource protocols
|
||||||
|
|
||||||
|
// MARK: - UITableViewDelegate
|
||||||
|
|
||||||
|
public func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - UITableViewDataSource
|
||||||
|
|
||||||
|
public func numberOfSections(in tableView: UITableView) -> Int {
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
|
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## Convention - Constants
|
## Convention - Constants
|
||||||
|
|
||||||
Use structs or nested structs to group constants when possible; the grouping should be based on logical use instead of structure or type of the constants.
|
Use structs or nested structs to group constants when possible; the grouping should be based on logical use instead of structure or type of the constants.
|
|
@ -11,7 +11,7 @@ The Swift coding conventions guide documents many best practices for writing Swi
|
||||||
* [Comments](Comments.md)
|
* [Comments](Comments.md)
|
||||||
* [Delegates](Delegates.md)
|
* [Delegates](Delegates.md)
|
||||||
* [Early Return](EarlyReturn.md)
|
* [Early Return](EarlyReturn.md)
|
||||||
* [File Content Ordering](FileContentOrdering.md)
|
* [File Organization](FileOrganization.md)
|
||||||
* [Immutability](Immutability.md)
|
* [Immutability](Immutability.md)
|
||||||
* [Naming](Naming.md)
|
* [Naming](Naming.md)
|
||||||
* [Property Observers](PropertyObservers.md)
|
* [Property Observers](PropertyObservers.md)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче