В этой статье мы обсудим, как писать код на Swift, который будет выглядеть так, как будто его написал опытный Senior разработчик.
1. Отдавайте предпочтение value-типам вместо reference-типов
Swift предоставляет struct и class, и на начальном этапе разработчики часто используют классы для создания моделей данных или хранения состояния.
Однако опытные разработчики предпочитают использовать struct, если нет необходимости в совместном использовании состояния или наследовании.
struct User {
let id: Int
var name: String
}
struct — легковесные типы, безопасные для многопоточности и по умолчанию обеспечивают неизменяемость.
2. Грамотно работайте с Optional
Новички часто злоупотребляют оператором принудительной распаковки (!), расставляя его по всему коду. Это серьёзная проблема — при nil в данных такое обращение приведёт к крашу приложения.
func getUserName() -> String? {
return nil
}
let name:String! = getUserName()
print(name.uppercased())
Что делают опытные:
if let name = getUserName() {
print(name.uppercased())
} else {
print("No name available")
}
Или, еще лучше:
print(getUserName()?.uppercased() ?? "No name available")
3. Используйте расширения, чтобы поддерживать чистоту кода
Новички часто дублируют одну и ту же логику в разных местах приложения. Опытные разработчики выносят такую функциональность в extension, чтобы переиспользовать код и держать его более структурированным и читаемым.
extension String {
var isValidEmail: Bool {
contains("@") && contains(".")
}
}
Вместо повторения логики:
if email.contains("@") && email.contains(".") { ... }
Пишите так:
if email.isValidEmail { ... }
4. Отдавайте предпочтение let вместо var
Опытные разработчики стараются использовать let, а не var, поскольку это обеспечивает неизменяемость и может положительно влиять на производительность.
Используйте var только в тех случаях, когда изменение значения действительно необходимо.
5. Документируйте код
Иногда в коде встречается логика, которую невозможно однозначно понять без дополнительного контекста — в таких случаях опытные разработчики добавляют комментарии, чтобы прояснить намерение.
Не стоит комментировать каждую строку — пишите комментарии только там, где это действительно нужно.
/// Loads the cached user profile from disk.
/// - Returns: A `User` object if found, otherwise `nil`.
func loadUserProfile() -> User? { ... }
6. Делайте функции короткими и сфокусированными
Новички часто пишут всю логику в одном месте, из-за чего код становится сложным для чтения и поддержки.
Опытные разработчики разбивают логику на небольшие функции, каждая из которых решает одну конкретную задачу — это повышает читаемость, упрощает тестирование и дальнейшую поддержку кода.
func handleLogin() {
showLoading()
val result = login()
hideLoading()
showToast(result.message)
}
Это затрудняет чтение и отладку кода. Лучше разделить каждую часть на отдельные функции.
fun showLoading() = ... fun hideLoading() = ... fun login(): LoginResult = ..
7. Пишите декларативный код
Опытные разработчики предпочитают писать декларативный код, который легко писать и читать.
Вместо этого:
var items: [String] = []
for fruit in fruits {
if fruit.hasPrefix("A") {
items.append(fruit)
}
}
Делайте так:
let items = fruits.filter { $0.hasPrefix("A") }
8. Заменяйте цепочки if на switch
Новички часто пишут длинные цепочки if-else, из-за чего код становится громоздким и трудночитаемым.
В большинстве таких случаев лучше использовать switch — он делает код более структурированным, наглядным и удобным для поддержки.
switch serverCode {
case 200: print("Ok")
case 400 : print("Bad Request")
case 401,403 :print("Not Authorized")
case 500 : print("Server Error")
default : print("Network Error")
}

