Поиск…


замечания

У Свифта есть официальный стиль руководства: Swift.org API Design Guidelines . Еще один популярный справочник - официальный путеводитель Swift Style от Raywenderlich.com.

Очистить использование

Избегайте неоднозначности

Название классов, структур, функций и переменных должно избегать двусмысленности.

Пример:

extension List {
    public mutating func remove(at position: Index) -> Element {
        // implementation
    }
}

Вызов функции этой функции будет выглядеть следующим образом:

list.remove(at: 42)

Таким образом, избегается двусмысленность. Если вызов функции был бы просто list.remove(42) было бы неясно, будет ли удален элемент, равный 42, или если элемент в индексе 42 будет удален.


Избегайте избыточности

Название функций не должно содержать избыточной информации.

Плохой пример:

extension List {
    public mutating func removeElement(element: Element) -> Element? {
        // implementation
    }
}

Вызов функции может выглядеть как list.removeElement(someObject) . Переменная someObject уже указывает, что элемент удален. Было бы лучше, чтобы подпись функции выглядела так:

extension List {
    public mutating func remove(_ member: Element) -> Element? {
        // implementation
    }
}

Вызов этой функции выглядит так: list.remove(someObject) .


Именование переменных в соответствии с их ролью

Переменные должны быть названы их ролью (например, поставщиком, приветствием) вместо их типа (например, фабрика, строка и т. Д.).

Высокая связь между именем протокола и именами переменных

Если имя типа описывает его роль в большинстве случаев (например, Iterator), тип должен быть назван суффиксом `Type`. (например, IteratorType)

Предоставьте дополнительные сведения при использовании слабо типизированных параметров

Если тип объекта явно не указывает на его использование в вызове функции, функция должна быть названа с предшествующим существительным для каждого слабо типизированного параметра, описывающего его использование.
Пример:
func addObserver(_ observer: NSObject, forKeyPath path: String)

к которому вызов будет выглядеть как `object.addObserver (self, forKeyPath: path)

вместо

func add(_ observer: NSObject, for keyPath: String)

к которому вызов будет выглядеть как object.add(self, for: path)

Свободное использование

Использование естественного языка

Вызов функций должен быть близок к естественному английскому языку.

Пример:

list.insert(element, at: index) 

вместо

list.insert(element, position: index)

Именование методов фабрики

Фабричные методы должны начинаться с префикса `make`.

Пример:

factory.makeObject()

Именование параметров в инициализаторах и заводских методах

Имя первого аргумента не должно быть связано с присвоением имени фабричному методу или инициализатору.

Пример:

factory.makeObject(key: value)

Вместо:

factory.makeObject(havingProperty: value)

Именование по побочным эффектам

  • Функции с побочными эффектами (mutating functions) следует называть с помощью глаголов или существительных с префиксом form- .
  • Функции без побочных эффектов (nonmutating functions) должны быть названы с использованием существительных или глаголов с суффикс -ing или -ed .
Пример: Мутирующие функции:
print(value)
array.sort()                 // in place sorting
list.add(value)              // mutates list
set.formUnion(anotherSet)    // set is now the union of set and anotherSet

Немутативные функции:

let sortedArray = array.sorted()     // out of place sorting
let union = set.union(anotherSet)    // union is now the union of set and another set

Булевы функции или переменные

Заявления, связанные с булевыми, должны читаться как утверждения.

Пример:

set.isEmpty
line.intersects(anotherLine)

Протоколы именования

  • Протоколы, описывающие, что что-то нужно называть, используют существительные.
  • Протоколы, описывающие возможности, должны иметь -able , -ible или -ing как суффикс.
Пример:
Collection        // describes that something is a collection
ProgressReporting // describes that something has the capability of reporting progress
Equatable         // describes that something has the capability of being equal to something

Типы и свойства

Типы, переменные и свойства должны читаться как существительные.

Пример:

let factory = ...
let list = [1, 2, 3, 4]

капитализация

Типы и протоколы

Имена типов и протоколов должны начинаться с буквы верхнего регистра.

Пример:

protocol Collection {}
struct String {}
class UIView {}
struct Int {}
enum Color {}

Все остальное...

Переменные, константы, функции и случаи перечисления должны начинаться с строчной буквы.

Пример:

let greeting = "Hello"
let height = 42.0

enum Color {
    case red
    case green
    case blue
}

func print(_ string: String) {
    ...
}

Случай верблюда:

Все имена должны использовать соответствующий верблюд. Верхний верблюжковый футляр для имен типов / протоколов и нижний корпус верблюда для всего остального.

Верхний верблюд:

protocol IteratorType { ... }

Нижняя часть верблюда:

let inputView = ...

Сокращения

Сокращения следует избегать, если они не используются (например, URL, ID). Если используется аббревиатура, все буквы должны иметь один и тот же случай.

Пример:

let userID: UserID = ...
let urlString: URLString = ...


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow