Программирование  •  03 мая  2023  •  5 мин чтения

Главное о Swift: плюсы, минусы, особенности и примеры кода

Чтобы писать приложения для iOS, языки программирования общего назначения вроде Java, C++ или Python не подойдут. Нужно освоить Swift, созданный специально для устройств Apple.

Где и для чего используется язык Swift

Язык программирования Swift используют, чтобы писать приложения и программы для устройств Apple: айфонов, айпадов, умных часов, телевизоров, макбуков и стационарных компьютеров с macOS. В iOS-разработке этот язык считается стандартом.

Инструменты и библиотеки Swift позволяют писать на нём сайты и веб-сервисы. Такие задачи встречаются в компаниях, где разрабатывают приложения для iOS и нужны их веб-версии.

На Swift полностью или частично написано множество мобильных версий приложений и сервисов для iOS, например Firefox, YouTube, WordPress, Uber.

Немного истории

Долгое время приложения для устройств Apple писали на Objective-C. Этот язык был разработан Apple ещё в 1983 году на базе С и предназначался в первую очередь для Mac OS. С появлением мобильных устройств его дорабатывали, но было очевидно, что устаревший язык плохо подходит для новой задачи.

Objective-C обладал достаточно громоздким и сложным синтаксисом. Это было приемлемо, когда программистов требовалось мало, но когда спрос на них вырос, пришлось обучать их достаточно быстро. Apple нужен был новый язык — более современный и простой в освоении. Поэтому в 2010 году программисты этой компании занялись созданием Swift для iOS-разработки. Многое взяли как из Objective-C, так и из Rust, Haskell, Ruby, Python, C#, CLU и множества других языков.

В 2014 году Swift официально представили миру, в 2015 уже разработали его вторую, улучшенную версию. После язык регулярно обновляли — сейчас все пользуются Swift 5, созданным в 2019 году и обновляемым в среднем каждые полгода.

Сейчас Swift считается стандартом для разработки приложений для iOS и macOS. Некоторые компании ещё разрабатывают приложения на Objective-C, но в основном это поддержка старого кода. Большинство стараются переписать старый код на Objective-C, а весь новый писать на Swift.

Для сравнения: вот код одного и того же калькулятора, написанного на двух разных языках. Синтаксис Swift более ёмкий, простой и читабельный

Основные характеристики языка программирования Swift

1. Поддерживает и объектно-ориентированное, и функциональное программирование. Swift поддерживает все необходимые инструменты ООП, которые позволяют работать с элементами кода как с проектами. Swift был разработан как язык с поддержкой функционального программирования и имеет более богатый набор инструментов функционального программирования, чем Objective-C. Это позволяет применять Swift для создания приложений для iOS и других задач с разными требованиями.

2. Защищён от ошибок. В большинстве старых языков программирования не предусмотрена защита от некоторых проблем, например контроль за типами переменных, которого не было в Objective-C. В Swift с этим всё в порядке, что помогает избежать ошибок при написании кода.

3. Наследник Objective-C. Swift позволяет использовать конструкции и библиотеки своего предшественника. Это упрощает разработку для тех, кто переходит с Objective-C на Swift.

4. Поддерживает управление памятью. Когда объект кода перестаёт быть нужным, Swift автоматически освобождает память, которая использовалась для этого объекта. Никаких специальных манипуляций для этого не нужно. Это делает Swift удобным для мобильных приложений, где ограничения памяти обычно довольно серьёзные.

Преимущества и недостатки языка Swift

Преимущества

Простой и понятный синтаксис. Код на Swift читается гораздо легче, чем на Objective-C и многих других языках программирования. Это позволяет быстрее работать, проще редактировать чужой код и легче выучить язык.

Высокая производительность. За счёт управления памятью и некоторых других встроенных возможностей Swift позволяет писать приложения для iOS, которые быстро работают на мобильных устройствах.

Безопасность. Swift безопаснее более старых языков программирования, что снижает риск поломки приложения — как из-за неверно написанного кода, так и из-за действий пользователей.

Официальная поддержка. Swift — официальный язык от Apple. Он бесплатный и встроен в инструмент для разработки Xcode, поэтому идеально подходит для разработки приложений для iOS.

Недостатки

Меньше готовых инструментов и библиотек. Их было довольно мало и у Objective-C, а у Swift из-за молодости — ещё меньше. Многое придётся писать с нуля самостоятельно.

Регулярные изменения. Swift постоянно развивается. Это звучит как плюс, однако на практике означает, что разработчику нужно постоянно актуализировать свои знания.

Трудно перестроиться после Objective-C. Несмотря на некоторую схожесть, Swift сильно отличается от своего предшественника. Тем, кто уже знает Objective-C, придётся потратить время, чтобы перестроиться с одного языка на другой.

Сложности и особенности изучения языка Swift

Swift был создан простым и удобным для изучения. Однако при его освоении придётся столкнуться с некоторыми сложностями, к которым лучше подготовиться:

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

Процесс обучения никогда не закончится. Из-за регулярных обновлений знания придётся актуализировать постоянно. Во многом это касается и других языков и технологий в IT, но в случае со Swift изменения происходят часто, язык развивается, появляется новый функционал для оптимизации приложений и облегчения работы разработчиков. В 2019 году выпустили стабильную версию Swift 5. Новые версии полностью совместимы с предыдущими.

Многое придётся писать самостоятельно. У популярных языков много готовых библиотек и инструментов. Они позволяют не программировать какие-то вещи с нуля, а сразу встраивать в свой код. У Swift такие инструменты тоже есть, но их существенно меньше. Эти инструменты не придётся осваивать, но писать функции с нуля нужно будет чаще.

Осваивать новый язык всегда проще под контролем преподавателя и с максимумом практики. На курсе «iOS-разработчик» студенты изучают теоретические основы, а затем выполняют практические задания, чтобы закрепить навыки. Профессиональные разработчики проверяют работы студентов и отвечают на вопросы.

Примеры кода на языке Swift

Разберём три примера кода на языке разработки Swift, от простых к сложным.
Вывод строки, цикл и сравнение переменных
Этот простой код демонстрирует базовые функции языка программирования для iOS — вывод на экран сообщения, работу с числами и простейший цикл.
  
	
// Объявление переменной
var myVariable = "Hello, world!"

// Вывод сообщения на консоль
print(myVariable)

// Объявление константы
let myConstant = 10

// Условный оператор if
if myConstant < 20 {
    print("Less than 20")
} else {
    print("Greater than or equal to 20")
}

// Цикл for–in
for i in 0..<5 {
    print("\(i) times 2 is \(i*2)")
}
 
Этот код при запуске выведет в консоли следующее:
За вывод отвечают функции print. Что именно они выведут, зависит от другого кода и заданных переменных

Код можно запустить в песочнице Playground в Xcode, создав File → New → Playground → Blank.

Игра «Камень, ножницы, бумага»
Этот код позволяет играть с компьютером в простую игру: он принимает от пользователя одну из трёх фигур, генерирует случайную, а затем сравнивает их и объявляет победителя.
  
	
import Foundation

// Функция для получения случайного жеста от компьютера
func getComputerGesture() -> String {
    let gestures = ["Rock", "Paper", "Scissors"]
    return gestures.randomElement()!
}

// Функция, которая принимает два жеста и возвращает победителя
func getWinner(playerGesture: String, computerGesture: String) -> String {

    // Ничья
    if playerGesture == computerGesture {
        return "Ничья!"
    }
    
    // Игрок при выборе камня побеждает, если компьютер выбрал ножницы
    if playerGesture == "Rock" && computerGesture == "Scissors" {
        return "Вы победили!"
    }
    
    // Игрок при выборе ножниц побеждает, если компьютер выбрал бумагу
    if playerGesture == "Scissors" && computerGesture == "Paper" {
        return "Вы победили!"
    }
    
    // Игрок при выборе бумаги побеждает, если компьютер выбрал камень
    if playerGesture == "Paper" && computerGesture == "Rock" {
        return "Вы победили!"
    }
    
    // Если всё иное, компьютер выиграл
    return "Вы проиграли..."
}

// Функция для получения жеста от пользователя
func getPlayerGesture() -> String {
    print("Choose your move: (R)ock, (P)aper, or (S)cissors?")
    
    while true {
        if let playerChoice = readLine(strippingNewline: true) {
            
            // Обработка выбора игрока
            switch playerChoice.lowercased() {
            case "r", "rock":
                return "Rock"
            case "p", "paper":
                return "Paper"
            case "s", "scissors":
                return "Scissors"
            default:
                print("Выберите жест корректно: (R)ock, (P)aper, or (S)cissors?")
            }
        }
    }
}

// Основной цикл игры
while true {
    let playerGesture = getPlayerGesture()
    let computerGesture = getComputerGesture()
    let winner = getWinner(playerGesture: playerGesture, computerGesture: computerGesture)
    print("Вы выбрали \(playerGesture), компьютер выбрал \(computerGesture). \(winner)")
    
    // Запрашиваем у пользователя, хочет ли он играть ещё раз
    print("Сыграем ещё раз? (Y)es or (N)o")
    if let playAgain = readLine(strippingNewline: true)?.lowercased() {
        if playAgain == "n" {
            break
        }
    }
}
        
Код будет выводить запрос жеста, показывать, что выбрал компьютер, объявлять победителя и предлагать сыграть ещё раз. Цикл игры продолжается до тех пор, пока пользователь не решит, что пора заканчивать.

Код можно запустить в проекте для macOS в Xcode. Для этого нужно открыть File → New → Project → macOS → Command Line Tool.

Часть коммерческого приложения, обменивающаяся данными с сервером
Это пример достаточно сложного кода, который бы мог стать частью реального рабочего приложения. Он позволяет приложению отправлять сообщения на сервер и получать оттуда ответ.
  

import UIKit

class ViewController: UIViewController {

    // Объекты интерфейса пользователя
    @IBOutlet weak var myTextField: UITextField!
    @IBOutlet weak var myButton: UIButton!
    @IBOutlet weak var myLabel: UILabel!
    
    // Функция обработки нажатия кнопки
    @IBAction func myButtonTapped(_ sender: Any) {
        guard let enteredText = myTextField.text else {
            return
        }
        
        // Отправка текста на сервер
        MyServer.sendTextToServer(text: enteredText) { (serverResponse) in
            DispatchQueue.main.async {
                self.myLabel.text = serverResponse.responseText
            }    
        }
    }
}

class MyServer {
    // Отправка текста на сервер
    static func sendTextToServer(text: String, completion: @escaping (ServerResponse) -> Void) {
        // Обработка ответа сервера
        let serverResponse = ServerResponse(responseCode: 200, responseText: "Your text was successfully sent to the server!")
        completion(serverResponse)
    }
}

struct ServerResponse {
    let responseCode: Int
    let responseText: String
}
       
В этом коде используются объекты интерфейса пользователя, такие как UITextField, UIButton и UILabel, для создания простого взаимодействия. Пользователь вводит текст в текстовое поле (myTextField), нажимает на кнопку (myButton), приложение отправляет этот текст на сервер и получает ответ. Также здесь применяется асинхронная обработка, чтобы приложение не переставало работать, пока общается с сервером. Это простой пример — реальный код для коммерческого приложения будет намного сложнее.

Код из примера можно запустить в проекте для macOS в Xcode. Для этого нужно создать File → New → Project → iOS → App.

С чего начать обучение

Чтобы начать программировать на Swift, нужно освоить:

1. Синтаксис Swift. Операторы, циклы, переменные, функции.

2. Общие знания о программировании. Понимание типов данных и структур данных понадобится, чтобы писать программы самостоятельно, а не просто опираться на готовые примеры и знакомый синтаксис.

3. Разработку мобильных приложений. В основном на Swift пишут для iOS, watchOS и tvOS, поэтому нужно знать их специфику и освоить нужные для этого инструменты, например UIKit, Core Data, MapKit.

Для старта этого вполне достаточно. Дальше придётся углубляться в тему: изучать UI/UX, работу с базами данных, больше узнавать о возможностях языка. И конечно, больше практиковаться, потому что одних теоретических знаний для работы недостаточно.

Совет эксперта

Анастасия Кудашева

Если вы решили начать свой путь в iOS-разработке, помните, что никому не было легко в новом деле. Если сейчас сложно — это хороший знак, который говорит о том, что вы на верном пути. Полученные знания стоит закрепить на собственном проекте. Например, сделать личный рандомайзер, приложение-помощник для любимой игры или другое приложение, которое может понадобиться в повседневной жизни.

Не забывайте поддерживать свою мотивацию. Обязательно отмечайте свои успехи и анализируйте ошибки. Извлекайте из этого уроки и используйте их для дальнейшего улучшения своих навыков, чтобы стать настоящим экспертом в iOS-разработке.

Статью подготовили:
Анастасия Кудашева
Яндекс Практикум
Наставница на курсе «iOS-разработчик», iOS-разработчица
Яндекс Практикум
Редактор
Анастасия Павлова
Яндекс Практикум
Иллюстратор

Дайджест блога: ежемесячная подборка лучших статей от редакции

Поделиться

Успейте начать учебу в Практикуме до конца ноября со скидкой 20%

Wed Aug 21 2024 16:14:21 GMT+0300 (Moscow Standard Time)