swift

Всем привет. Я решил сделать серию постов с вызывающим названием «Swift за 24 часа». Это не образовательная программа для начинающих. Скорее это шпаргалка для тех, кто уже имеет солидный опыт разработки для Mac и iOS на старом добром Objective-C и хочет быстро, очень быстро, освоить Swift и начать писать проекты на этом прекрасном языке.

Swift за 24 часа — Введение

Итак. Swift – это новый язык программирования для разработки iOS и OS X приложений, который сочетает в себе все лучшее от C и Objective-C, но лишен ограничений, накладываемых в угоду совместимости с C. Swift представляет свои собственные версии всех основных C и Objective-C типов, включая Int для целых, Double и Float для значений с плавающей точкой, Bool для логических значений, и String для текстовых данных. Swift также представляет мощные версии трех основных типов коллекций — Array, Set и Dictionary.

Также как C Swift использует переменные и константы для работы и хранения значений.

В дополнение к стандартным типам Swift предлагает продвинутый тип ранее не существовавший в Objective-C, под названием tuple (тапл), в переводе на русский «кортеж». Тапл позволяет создавать и передавать группы значений. Можно использовать тапл для возврата из функции нескольких значений под одним именем.

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

Swift — это типо-безопасный язык программирования. Если часть вашего кода ожидает тип String, Swift предотвратить передачу Int по ошибке.

Swift —  мощный язык программирования, такой же понятный и увлекательный, как скриптовый язык. Он поддерживает так называемые playground-ы, которые позволяют программистам экспериментировать с кодом, видя результат в режиме реального времени без необходимости компилировать и запускать приложение.

Swift вобрал в себя все лучшее от современных языков и разработан с учетом обширного опыта компании Apple. Swift – это новый фантастический способ создавать приложения для iOS и OS X, и Apple продолжает развивать его, добавляя новый функционал и представляя новые возможности.

Я же со своей стороны предлагаю всем вам, дорогие читатели, амбициозную цель — Изучить Swift за 24 часа.

Удачи!

Константы и переменные

Объявление констант и переменных

Для того, чтобы объявить константу используем ключевое слово let, для того, чтобы объявить переменную используем ключевое слово var

let maximumUserAge = 50
var activeUsersCount = 0

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

var x = 0.0, y = 0.0, z = 0.0

Apple выделяет следующее правило

Если вы не собираетесь менять значение в коде, всегда декларируйте его как константу используя ключевое слово let. Используйте переменные только для значений, которые будут меняться.

Аннотация типов

Прежде чем перейти далее следует отметить правило, которое Apple выделило особо

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

Например, если вы объявите переменные как

var age = 10
var name = "Alexander"

Swift автоматически определит тип age как Int, a name как Sting

Если все же вы хотите задать тип в ручную, то после имени переменной или константы поставьте двоеточие и после через пробел укажите тип

var age: Int = 10
var name: String = "Alexander"

Можно объявлять сразу несколько констант или переменных одной строкой через запятую

var red, green, blue: Double

Именование констант и переменных

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

var Ω = 10
let номерШколы = 6
let 😎 = "Smile"

за исключением пробелов, математических символов, стрелок, private-used Unicide points или символов для рисования. Не могут начинаться с числа, но содержать числа могут.

Как только вы объявили переменную или константу, вы не можете ее переобъявить с тем же именем или изменить ее тип.

Ну и естественно, вы можете менять значения переменных и не можете менять значения констант.

// нельзя
let maximumUserAge = 50
maximumUserAge = 60 //cannot assign to value

// можно
var activeUsersCount = 0
activeUsersCount = 10

Вывод констант и переменных

Чтобы вывести в консоль значение константы или переменной используем функцию print(_:separator:terminator:)

var welcomeMessage = "Hello World"

print(welcomeMessage)

В результате в консоль будет напечатана строка «Hello World\n»

В Swift есть такая классная вещь как интерполяция строк.

Вспомним Objective-C

NSLog(@"Welcome message is %@", welcomeMessage)

В Swift аналогичный вывод будет выглядеть так

print("Welcome message is \(welcomeMessage)")

Прекрасно, не правда ли.

Комментарии

Комментарии остались без изменений.

/**
 * update scrollView frame with ads banner
 */

// Hello World, this is just a comment

Точка с запятой

В Swift не надо ставить точку с запятой в конце каждой строки кода!

Целые

Swift предоставляет знаковые и беззнаковые целые в 8, 16, 32 и 64 битной форме. Именование подобно С. Так 8-битовое беззнаковое — UInt8, 32-битовое знаковое — Int32.

Границы целых

Можно получить доступ к минимальному и максимальному значению каждого целочисленного типа через min и max свойства.

let minValue = UInt8.min  // minValue is equal to 0, and is of type UInt8
let maxValue = UInt16.max  // maxValue is equal to 65535, and is of type UInt16

Int

В большинстве случаев вам ненужно специально указывать размер вашего целого в коде. Swift представляет специальный дополнительный тип Int, который соответствует платформе

  • On a 32-bit platform, Int is the same size as Int32.
  • On a 64-bit platform, Int is the same size as Int64.
До тех пор пока вам не требуется специальный размер целого, всегда используйте Int для целых значений в вашем коде. Даже на 32-bit платформах, Int может хранить значения между -2,147,483,648 и 2,147,483,647, и это в большинстве случаев достаточно для множества целочисленных диапазонов.

UInt

UInt — беззнаковый целый тип.

  • On a 32-bit platform, UInt is the same size as UInt32.
  • On a 64-bit platform, UInt is the same size as UInt64.
Apple рекомендует использовать UInt для особых нужд «Use UInt only when you specifically need an unsigned integer type with the same size as the platform’s native word size.» Если такой необходимости нет Int вседа предпочтительней, даже если вы знаете, что значения не будут принимать отрицательную форму.

Значения с плавающей точкой

  • Double представляет 64-bit floating-point number.
  • Float представляет a 32-bit floating-point number.
Double имеет как минимум 15 знаков после запятой, в то время как Float имеет 6 знаков после запятой.

Типо-безопасность и типо-определение

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

Swift выполняет проверку типов на этапе компиляции. Это позволяет вам отлавливать ошибки настолько рано насколько это возможно.

Типо-определение в частности применяется когда вы объявляете переменную или константу и задаете ей значение. Swift определит тип по значению

let meaningOfLife = 42
// meaningOfLife будет иметь тип Int

Значения с плавающей точкой по умолчанию будут Double

let pi = 3.14159
// pi будет иметь тип Double

Числовые литералы

Целый литерал может быть записаны как:

  • Десятичное, без префикса
  • Двоичное, с 0b префиксом
  • Восьмиричное, с 0o префиксом
  • Шестнадцатиричное, с 0x префиксом
let decimalInteger = 17
let binaryInteger = 0b10001       // 17 in binary notation
let octalInteger = 0o21           // 17 in octal notation
let hexadecimalInteger = 0x11     // 17 in hexadecimal notation

Также Swift позволяет применять следующие формы записи

let decimalDouble = 12.1875
let exponentDouble = 1.21875e1
let hexadecimalDouble = 0xC.3p0

let paddedDouble = 000123.456
let oneMillion = 1_000_000
let justOverOneMillion = 1_000_000.000_000_1

Преобразование типов

Целочисленные преобразования

let cannotBeNegative: UInt8 = -1
// UInt8 не может содержать отрицательные значения, компилятор выдаст ошибку
let tooBig: Int8 = Int8.max + 1
// Int8 не может содержать значение больше максимального
// компилятор выдаст ошибку

let twoThousand: UInt16 = 2_000
let one: UInt8 = 1
let twoThousandAndOne = twoThousand + one
// операция с разными типами
// компилятор выдаст ошибку

let twoThousandAndOne = twoThousand + UInt16(one)
// необходимо преобразование к большему типу

Преобразования целых и значений с плавающей точкой

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

let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) + pointOneFourOneFiveNine
// pi равно 3.14159, и оно будет типа Double
let integerPi = Int(pi)
// integerPi равно 3, и оно будет типа Int
Правила для объединения числовых констант и переменных отличаются от правил для числовых литералов. Буквальное значение 3 может быть добавлено непосредственно к буквальному значению 0.14159, поскольку числовые литералы не имеют явного типа. Их тип выводится только в том месте, что они оцениваются компилятором.

Алиас типов typealias

Вы можете придумать типу любой алиас, например

typealias AudioSample = UInt16

Как только вы определили алиас типа, вы можете использовать его где угодно

var maxAmplitudeFound = AudioSample.min
// maxAmplitudeFound is now 0

Логический тип

Swift имеет базовый Boolean тип, называемый Bool. Boolean значения называются логическим, потому что они могут быть только true или false. Swift представляет два Boolean значения, true and false:

let orangesAreOrange = true
let turnipsAreDelicious = false

Вам не нужно декларировать тип Bool, если вы присвоили переменной или константе значение true или false.

Логические значения практически применимы когда вы работаете с условными операторами

if turnipsAreDelicious {
    print("Mmm, tasty turnips!")
} else {
    print("Eww, turnips are horrible.")
}

Типо-безопасность в Swift предотвратит использование не Bool в том месте, где должен быть Bool. Следующий пример кода выдаст ошибку

let i = 1
if i {
    // this example will not compile, and will report an error
}

В то же время альтернативный вариант сработает

let i = 1
if i == 1 {
    // this example will compile successfully
}

Поздравляю! Мы закончили 1ый час из 24 на изучение Swift. Рекомендую закрепить данный материал потренировавшись в плейграунде.

Продолжение следует…