Swift - это язык программирования, созданный компанией Apple, для разработки
приложений iOS и OS X. Разработанный, чтобы сосуществовать с Objective-C и
быть более устойчивым к ошибочному коду, Swift был представлен в 2014 году на
конференции разработчиков Apple, WWDC. Приложения на Swift собираются
с помощью LLVM компилятора, включенного в Xcode 6+.
Официальная книга по [языку программирования Swift](https://itunes.apple.com/us/book/swift-programming-language/id881256329) от Apple доступна в iBooks.
Смотрите еще [начальное руководство](https://developer.apple.com/library/prerelease/ios/referencelibrary/GettingStarted/LandingPage/index.html) Apple, которое содержит полное учебное пособие по Swift.
```swift
// импорт модуля
import UIKit
//
// MARK: Основы
//
// Xcode поддерживает заметные маркеры, чтобы давать примечания свою коду
// и вносить их в список обозревателя (Jump Bar)
// MARK: Метка раздела
// TODO: Сделайте что-нибудь вскоре
// FIXME: Исправьте этот код
println("Привет, мир")
// переменные (var), значение которых можно изменить после инициализации
// константы (let), значение которых нельзя изменить после инициализации
var myVariable = 42
let øπΩ = "значение" // именование переменной символами unicode
let π = 3.1415926
let convenience = "Ключевое слово" // контекстное имя переменной
let weak = "Ключевое слово"; let override = "еще ключевое слово" // операторы
// могут быть отделены точкой с запятой
let `class` = "Ключевое слово" // одинарные кавычки позволяют использовать
// ключевые слова в именовании переменных
let explicitDouble: Double = 70
let intValue = 0007 // 7
let largeIntValue = 77_000 // 77000
let label = "некоторый текст " + String(myVariable) // Приведение типа
let piText = "Pi = \(π), Pi 2 = \(π * 2)" // Вставка переменных в строку
// Сборка особых значений
// используя ключ -D сборки конфигурации
#if false
println("Не печатается")
let buildValue = 3
#else
let buildValue = 7
#endif
println("Значение сборки: \(buildValue)") // Значение сборки: 7
/*
Optional - это особенность языка Swift, которая допускает вам сохранять
`некоторое` или `никакое` значения.
Язык Swift требует, чтобы каждое свойство имело значение, поэтому даже nil
должен явно сохранен как Optional значение.
Optional<T> является перечислением.
*/
var someOptionalString: String? = "optional" // Может быть nil
// как и выше, только ? это постфиксный оператор (синтаксический сахар)
var someOptionalString2: Optional<String> = "optional"
if someOptionalString != nil {
// я не nil
if someOptionalString!.hasPrefix("opt") {
println("содержит префикс")
}
let empty = someOptionalString?.isEmpty
}
someOptionalString = nil
// неявная развертка переменной Optional
var unwrappedString: String! = "Ожидаемое значение."
// как и выше, только ! постфиксный оператор (с еще одним синтаксическим сахаром)
var unwrappedString2: ImplicitlyUnwrappedOptional<String> = "Ожидаемое значение."
if let someOptionalStringConstant = someOptionalString {
// имеется некоторое значение, не nil
if !someOptionalStringConstant.hasPrefix("ok") {
// нет такого префикса
}
}
// Swift поддерживает сохранение значение любого типа
// AnyObject == id
// В отличие от `id` в Objective-C, AnyObject работает с любым значением (Class,
// Int, struct и т.д.)
var anyObjectVar: AnyObject = 7
anyObjectVar = "Изменять значение на строку не является хорошей практикой, но возможно."
/*
Комментируйте здесь
/*
Вложенные комментарии тоже поддерживаются
*/
*/
//
// MARK: Коллекции
//
/*
Массив (Array) и словарь (Dictionary) являются структурами (struct). Так
`let` и `var` также означают, что они изменяются (var) или не изменяются (let)
при объявлении типов.
*/
// Массив
var shoppingList = ["сом", "вода", "лимоны"]
shoppingList[1] = "бутылка воды"
let emptyArray = [String]() // let == неизменный
let emptyArray2 = Array<String>() // как и выше
var emptyMutableArray = [String]() // var == изменяемый
// Словарь
var occupations = [
"Malcolm": "Капитан",
"kaylee": "Техник"
]
occupations["Jayne"] = "Связи с общественностью"
let emptyDictionary = [String: Float]() // let == неизменный
let emptyDictionary2 = Dictionary<String,Float>() // как и выше
var emptyMutableDictionary = [String: Float]() // var == изменяемый
//
// MARK: Поток управления
//
// цикл for для массива
let myArray = [1, 1, 2, 3, 5]
for value in myArray {
if value == 1 {
println("Один!")
} else {
println("Не один!")
}
}
// цикл for для словаря
var dict = ["один": 1, "два": 2]
for (key, value) in dict {
println("\(key): \(value)")
}
// цикл for для диапазона чисел
for i in -1...shoppingList.count {
println(i)
}
shoppingList[1...2] = ["бифштекс", "орехи пекан"]
// используйте ..<дляисключенияпоследнегочисла
// цикл while
var i = 1
while i <1000{
i *= 2
}
// цикл do-while
do {
println("привет")
} while 1 == 2
// Переключатель
// Очень мощный оператор, представляйте себе операторы `if`с синтаксическим
// сахаром
// Они поддерживают строки, объекты и примитивы (Int, Double, etc)