Руководство Swift для начинающих
1. Введение
This is guide of Swift for beginners. In order to program Swift you must install XCode programming tools. You can see the instructions to download and install at:
Это инструкция для быстрого изучения, если вы только начинаете с Swift, способ инструкции это "Шаг за шагом" поэтому вам нужно прочитать и выполнять сверху вниз по порядку, это статья поможет вам иметь общее понятие, перед тем как начать другие детальные статьи.
2. Создайте ваш первый Project Swift
Это первое изображение, когда вы открываете XCode
Создать новый Project:
Мы создали простой Project (Приложение Console, это приложение без интерфейса).
Назвать project SwiftBasics:
Создать папку на Desktop чтобы сохранить ваши Project.
Назовите папку хранящую ваши project SwiftTutorials:
Ваш Project создан.
main.swift это исходный файл созданный при создании вашего project, вам нужно запустить этот исходный файл, он напишет на экране Console строку "Hello, world".
Нажать "Enable" чтобы разрешить программе работать в режиме для программиста.
Прогамма работает и печатает строку "Hello, world".
3. Объяснение основных характеристик Swift
Вам нужно иметь основное понятие Swift, это очень важно.
Что такое Top level?
Команда или выражение не включенное в функции, блоке или классе, то есть находится в Top-Level.
Top-Level это место объявления использования библиотек, объявляения переменных, констант, функций, классов. По умолчанию переменные и константы объявляются на уровне Top-Level этого исходного файла, который может использоваться в других исходных файлах того же модуля (project).
Вы не можете написать выражение в Top-Level, например выражения вызова функции. Поэтому вызвать функцию print("Hello") чтобы напечатать строку "Hello" в Top-Level не является действительным, только если вы сделаете это в исходном файле с названием main.swift (Это случай исключения).
Пункт начала в программе Swift:
В программе Swift файл main.swift является особенным файлом, так как он является начальным пунктом для запуска программы. Вы можете вызвать функцию или написать выражение в Top-Level на исходном файле main.swift, это исключение только для этого файла.
Я создаю новый исходный файл с названием newfile.swift, вы увидите оповещение ошибки когда я намеренно напишу выражение в Top-Level.
Выражения должны быть расположены в функции или блоке.
4. Добавить новый исходный файл
Теперь вам нужно создать свой первый исходный файл и запустить его.
На XCode, нажмите на правую кнопку мыши на папку содержащую исходный файл main.swift, выберите "New file".
Ввести название файла MyFirstSwift:
MyFirstSwift.swift создан:
Я изменю содержание только что созданного исходного файла, и добавлю функцию sayHello(), примечание: более детально про функцию будет рассказано в другой части.
MyFirstSwift.swift
import Foundation
// Содержание приветствия.
var message = "Hello every body"
// Функция sayHello()
func sayHello() {
// Вызвать функция print для распечатки на экран Console.
// Примечание: Вы не можете вызвать данную функцию у Top-Level.
print(message)
}
В Swift начальным пунктом для запуска приложения является main.swift, поэтому чтобы протестировать функцию sayHello() вам нужно вызвать в main.swift. Изменить код main.swift:
main.swift
import Foundation
print("Hello, World!")
// Вызвать функцию sayHello()
// (Написано в MyFirstSwift.swift
sayHello()
Running project.
5. Виды данных в Swift
Type | Typical Bit Width | Typical Range |
Int8 | 1byte | -127 to 127 |
UInt8 | 1byte | 0 to 255 |
Int32 | 4bytes | -2147483648 to 2147483647 |
UInt32 | 4bytes | 0 to 4294967295 |
Int64 | 8bytes | -9223372036854775808 to 9223372036854775807 |
UInt64 | 8bytes | 0 to 18446744073709551615 |
Float | 4bytes | 1.2E-38 to 3.4E+38 (~6 digits) |
Double | 8bytes | 2.3E-308 to 1.7E+308 (~15 digits) |
6. Переменные и объявление
Переменная определяется названием для области хранения данных где ваша программа может быть манипулирована. Каждая переменная в Swift имеет определенный вид данных, в котором определяется размер и рамки значения которые могут быть сохранены в памяти, и набор операторов применяющийся к переменной.
Переменная может менять значение в процессе ее существования в программе. Переменные с фиксированным значением называются константами. Используйте ключевое слово let чтобы объявить переменную константой.
В swift, вы можете объявить переменную в Top-Level или локальную переменную в класс или функции. С переменными объявленными в Top-Level, они могут быть использованы в других исходных файлах в одном модуле (Project).
Объявить переменную:
// <Variable name>: Название переменной
// <Data Type>: Вид данных
var <Variable name> : <Data Type> ;
// Объявить переменную, и прикрепить значение ей.
// <Variable name>: Название переменной
// <Data Type>: Вид данных
// <value>: Значение
var <Variable name> : <Data Type> = <value>;
// Объявить костанту
// <Constant name>: Название константы.
// <Data Type>: Вид данных
// <value>: Значение
let <Constant name> : <Data Type> = <value>;
// Пример:
// Объявить переменную
// Название переменной: year
// Вид данных: Int
// Значение: 2016
var year: Int = 2016;
// С числом примитивного вида (primitive type) (Int, Double, Bool) и String,
// вы можете пропустить в объявлении.
// Swift может понять ваше намерение.
..
// Может означать как String
var languageName = "Swift"
var version = 1.0 // Double
var introduced = 2014 // Int
var isAwesome = true // Bool
VariableExample.swift
import Foundation
// Использовать ключевое слово 'let' для объявления константы (constant).
// Названием константы является COPYRIGHT, видом данных является String,
// и значением является "o7planning".
// (Это константа объявленная в Top-Level
// Может быть использована в других исходных файлах в project).
let COPYRIGH: String = "o7planning"
// Использовать ключевое словое 'var' для объявления переменной (variable).
// Название переменной: year
// Вид данных: Int
// Значение: 2016
// (Это переменная объявленная в Top-Level
// Может быть использована в других исходных файлах в project).
var year: Int = 2016
func variableExample() {
// Объявить константу целочисленного типа (integer)
// Вы не можете прикрепить значение константе.
let MAX_SCORE = 100;
// Объявить целое число (integer).
var score = 90;
// Объявить строку (string).
var studentName = "Tom"
// Распечатать строку на экране Console.
print("Hi \(studentName)")
print("Your score: \(score)/\(MAX_SCORE)")
print("Assign new value for studentName")
// Прикрепить значение переменной studentName.
studentName = "Jerry"
print("Hi \(studentName)")
}
Изменить код исходного файла main.swift:
main.swift
import Foundation
// Вызвать функцию variableExample(),
// определенную в файле VariableExample.swift
variableExample()
Результаты запуска примера:
Hi Tom
Your score: 90/100
Assign new value for studentName
Hi Jerry
7. Команды ветки
Команда If-else
if это команда проверки определенного условия в Swift. Например: Если a > b, то ....
Общие операторы сравнения:
Оператор | Значение | Пример |
> | Больше | 5 > 4 правильно (true) |
< | Меньше | 4 < 5 правильно (true) |
>= | Больше или равно | 4 >= 4 правильно (true) |
<= | Меньше или равно | 3 <= 4 правильно (true) |
== | Равно | 1 == 1 правильно (true) |
!= | Неравно | 1 != 2 правильно (true) |
&& | И | a > 4 && a < 10 |
|| | Или | a == 1 || a == 4 |
// condition: Условие.
if ( condition ) {
// Сделать что-то здесь.
}
Пример:
// Пример 1:
if ( 5 < 10 ) {
print( "Five is now less than ten");
}
// Пример 2:
if ( true ) {
print( "Do something here");
}
Полная структура if - else if - else:
// Note that at most one block of code will be executed.
// The program checks the conditions from top to bottom.
// When a condition is true, this block will be executed.
// The remaining conditions will be ignored.
...
// If condition1 is true then ..
if (condition1 )
{
// Do something if condition1 is true.
}
// Else if condition2 is true then ....
else if(condition2 )
{
// Do something here if condition2 is true (condition1 is false).
}
// Else if conditionN is true then ...
else if(conditionN )
{
// Do something if conditionN is true
// (All the above conditions are false)
}
// Else (All the above conditions are false).
else {
// Do something.
}
IfElseExample.swift
import Foundation
func ifElseExample() {
// Объявить переменную вида UInt32 со случайным значением.
// (Функция arc4random() возвращает случайное значение).
var randomValue: UInt32 = arc4random()
print("Random value = " + String(randomValue))
// Разделить на 200 и вернуть остаток (remainder).
var age: UInt32 = randomValue % 200;
print("Your age= " + String(age))
// Проверить если age < 80 thì..
if (age < 80) {
print("You are pretty young");
}
else if age >= 80 && age <= 100 {
print("You are old");
}
// Наоборот (Остальные случаиi).
else {
print("You are very old");
}
}
Запуск примера:
Random value = 3107711145
Your age= 145
You are very old
Команда Switch-Case
Некоторые примеры использования switch:
SwitchExample1.swift
import Foundation
func switchExample1() {
// Предложить пользователю вариант выбора.
print("Please select one option:")
print("1 - Play a game")
print("2 - Play music")
print("3 - Shutdown computer")
print("---------------------")
var randomValue: UInt32 = arc4random()
// Разделить на 5 и вернуть остаток (remainder) (0, 1, 2, 3, 4)
var myValue:UInt32 = randomValue%5
// Объявить переменную 'option'.
// Cast вид UInt32 в вид Int.
// 'option' будет иметь значение 1, 2, 3, 4 или 5.
var option:Int = Int(myValue) + 1
// String(option): cast в String.
print("You select: " + String(option))
// Проверить значения 'option'.
switch (option) {
case 1:
print("You choose to play the game");
case 2:
print("You choose to play the music");
case 3:
print("You choose to shutdown the computer");
// Остальные случаи.
default:
print("Nothing to do...");
}
}
Запуск примера:
Please select one option:
1 - Play a game
2 - Play music
3 - Shutdown computer
---------------------
You select: 1
You choose to play the game
Вы можете использовать много значений в одном случае (case):
SwitchExample2.swift
import Foundation
func switchExample2() {
// Объявить переменную и прикрепить к ней значение 3.
var option = 3
print("Option = \(option) ")
// Проверить значение 'option'.
switch (option) {
case 1:
print("Case 1")
// В случае, значением является 2,3,4,5
case 2, 3, 4, 5:
print("Case 2,3,4,5!!!")
// В случае значение от 6 -> 10
case 6...10:
print("Case 6...10")
// В случае значение от 11 -> 20 и является нечетным.
case 11...20 where option % 2 == 1:
print("Case 11...20 and odd")
default:
print("Nothing to do...")
}
}
Запуск примера:
Option = 3
Case 2,3,4,5!!!
Fallthrought:
Если вы работаете с другим языком как Java, C#, вы можете увидеть что синтакс использования switch отличается от Swift. В Swift при правильном случае (case), блок команд данного случая (case) будет выполнен, и другие случаи не будут запущены.
С Java, C# если случай правильный, блок команды того случая будет запущен, и если отсутствует команда break то следующий блок команды case (или default) будет выполнен.
Swift был автоматически break после завершения выполнения блока команды case.
Swift добавляет команду fallthrought (Данная команда отсутствует в Java, C#), fallthrought говорит программе продолжить выполнение следующего блока команды case (или блок команды default).
Посмотрим изображенный пример:
SwitchFallthroughExample.swift
import Foundation
func switchFallthroughExample() {
var option = 15
switch (option) {
case 0...10:
print("Case 0...10")
// fallthrough: Выполнить следующий случай.
fallthrough
case 11...20:
print("Case 11...20")
// fallthrough: Выполнить следующий случай.
fallthrough
case 21...30:
print("Case 21...30")
// fallthrough: Выполнить следующий случай.
fallthrough
case 31...40:
print("Case 31...40")
case 41...50:
print("Case 41...50")
default:
print("Default case")
}
}
Запуск примера:
Case 11...20
Case 21...30
Case 31...40
8. Цикл в Swift
Цикл используется для повторного запуска блока команды. Он заставляет вашу программу повторно выполнять блок команды много раз, это один из основных задач в программировании
Swift поддерживает 4 разных вида циклов:
- FOR .. IN
- FOR
- WHILE
- REPEAT WHILE
Цикл for in
Цикл for .. in используется для просмотра на наборе, или массиве.
Синтаксис:
// <element>: Элемент
// <collection>: Коллекция
for <element> in <collection> {
// Сделать что-то здесь
}
Пример ниже использует for .. in для просмотра на массиве (Понятие массива будет упомянуто в следующей части).
ForInExample1.swift
import Foundation
func forInExample1() {
// Объявить массив с String с 5 элементами.
var languages:[String] = ["Java","C#", "C/C++", "Swift", "Ruby"]
for lang in languages {
print("Language " + lang)
}
}
Запуск примера:
Language Java
Language C#
Language C/C++
Language Swift
Language Ruby
Цикл for
Структура цикла FOR:
for (initialize variable ; condition ; updates new value for variable )
{
// Execute the block when the condition is true
}
Пример:
// Example 1:
// Declare a variable x and assign value 0.
// The condition is x < 5
// If x < 5 is true then execute the block.
// After each iteration, the value of x is increased by 1.
for (int x = 0; x < 5 ; x = x + 1)
{
// Do something here when x < 5 is true.
}
// Example 2:
// Declare variable x and assgin value of 2
// The condition is x < 15
// If x < 15 is true then execute the block.
// After each iteration, the value of x is increased by 3.
for (int x = 2; x < 15 ; x = x + 3)
{
// Do something here when x < 15 is true.
}
ForLoopExample.swift
import Foundation
func forLoopExample() {
print("For loop example");
// Объявить переменную x и прикрепить к ней значение 2.
// Условием является x < 15
// Если x < 15 верно (true) то выполнить блок команды.
// После каждого повтора (iteration), значение x увеличивается на 3.
for (var x = 2; x < 15; x = x + 3) {
print( );
print("Value of x = \(x)");
}
}
Результаты запуска примера:
For loop example
Value of x = 2
Value of x = 5
Value of x = 8
Value of x = 11
Value of x = 14
Цикл while
Синтаксис:
// condition: Условие
while (condition)
{
// Когда 'condition' верно, то выполнить блок команды.
}
Пример:
// Объявить переменную x.
int x = 2;
while ( x < 10)
{
// Сделать что-то здесь если x < 10 еще верно.
...
// Обновить новое значение переменной x.
x = x + 3;
}
WhileLoopExample.swift
import Foundation
func whileLoopExample() {
print("While loop example");
// Объявить переменную и прикрепить к ней значение 2.
var x = 2;
// Условием является x < 10
// Если x < 10 верно (true), то выполнить блок команды.
while (x < 10) {
print("Value of x = \(x)");
x = x + 3;
}
}
Результат запуска примера:
While loop example
Value of x = 2
Value of x = 5
Value of x = 8
Цикл repeat-while
Синтаксис цикла REPEAT-WHILE
// Особенностью цикла 'repeat-while' является выполнение блока конманд минимум 1 раз.
// После каждого запуска блока команд, он проверяет условия, чтобы знать выполнять ли дальше.
repeat {
// Сделать что-то здесь
// Потом проверить дальше условие, решить продолжать ли запуск данного блока команд или нет.
} while (condition)
RepeatWhileExample.swift
import Foundation
func repeatWhileExample() {
print("Repeat-While loop example")
// Объявить переменную и прикрепить к ней значение 2.
var x = 2
// Выполнить блок команд минимум один раз.
// После каждого раза выполнения блока команд,
// он проверит условие,
// если условие все еще верно, то блок команд выполняется дальше.
repeat {
print("Value of x = \(x)")
x = x + 3;
} while (x < 10)
}
Результаты запуска примера:
Repeat-While loop example
Value of x = 2
Value of x = 5
Value of x = 8
Команда break в цикле
break это команда которая может находиться в блоке команд цикла. Это команда завершения цикла беспричинно.
LoopBreakExample.swift
import Foundation
func loopBreakExample() {
print("Break example");
// Объявить переменную и прикрепить к ней значение 2.
var x = 2;
while (x < 15) {
print("----------------------");
print("x = \(x)");
// Если x = 5, то выйти из цикла.
if (x == 5) {
break;
}
// Увеличить значение x на 1.
x = x + 1;
print("After +1, x = \(x)");
}
}
Результат запуска примера:
Break example
----------------------
x = 2
After +1, x = 3
----------------------
x = 3
After +1, x = 4
----------------------
x = 4
After +1, x = 5
----------------------
x = 5
Команда continue в цикле
continue это команда, которая может находиться в цикле, при встрече с командой continue, программа пропустит команды в блоке ниже continue и начнет новый цикл.
LoopContinueExample.swift
import Foundation
func loopContinueExample() {
print("Continue example")
// Объявить переменную и прикрепить к ней значение 2.
var x = 2
while (x < 7) {
print("----------------------")
print("x = \(x)")
// Оператор % является делением с остатком.
// Если x является четным, то пропустить строки команд внизу 'continue'
// и начать следующее повторение (Если условие все еще верно).
if (x % 2 == 0) {
// Увеличить значение x на 1
x = x + 1
continue
}
else {
// Увеличить значение x на 1
x = x + 1
}
print("After +1, x = \(x)")
}
}
Результаты запуска примера:
Continue example
----------------------
x = 2
----------------------
x = 3
After +1, x = 4
----------------------
x = 4
----------------------
x = 5
After +1, x = 6
----------------------
x = 6
9. Массив в Swift
Одномерный массив
Массив в Swift на самом деле является Struct, он отличается с массивом в других языках как Java, C#,...Массив Java, C# имеет фиксированное количество элементов и не может добавить или убавить количество элементов, при этом массив в Swift может это сделать.
Это изображение одномерного массива 5 элементами, которые индексированы от 0 до 4.
Синтаксис объявления одномерного массива:
// Способ 1:
// Объявить массив чисел Int, и определить элементы.
var years: [Int] = [ 2001, 2003, 2005, 1980, 2003 ];
// Или (Swift понимает это как массив чисел Int).
var years = [ 2001, 2003, 2005, 1980, 2003 ];
// Способ 2:
// Объявить массив чисел Float.
// 3 элемента, и все элементы имеют значение 0.
var salaries:[Float] = [Float](count: 3,repeatedValue :0 );
// Или:
var salaries = [Float](count: 3,repeatedValue :0 );
// Способ 3:
// Объявить пустой массив (Не имеет элемента).
var emptyArray:[Int] = [Int]()
Например:
ArrayExample1.swift
import Foundation
func arrayExample1() {
// Способ 1:
// Объявить массив чисел Int, определить элементы.
var years: [Int] = [ 2001, 2003, 2005, 1980, 2003 ];
print("--- years --- ");
// count является property массива, он возвращает количество элементов массива.
print("Element count of array years = \(years.count)");
// Использовать цикл для for чтобы распечатать элементы массива.
for (var i = 0; i < years.count; i = i + 1) {
print("Element at \(i) = \(years[i])");
}
print("--- salaries --- ");
// Способ 2:
// Объявить массив чисел Float.
// 3 элемента, все элементы имеют значение 0.
var salaries:[Float] = [Float](count: 3,repeatedValue :0 );
// Прикрепить значения элементам.
salaries[0] = 1000;
salaries[1] = 1200;
salaries[2] = 1100;
// Использовать цикл для for чтобы распечатать элементы массива.
for (var i = 0; i < salaries.count; i = i + 1) {
print("Element at \(i) = \(salaries[i])");
}
}
Результаты запуска примера:
--- years ---
Element count of array years = 5
Element at 0 = 2001
Element at 1 = 2003
Element at 2 = 2005
Element at 3 = 1980
Element at 4 = 2003
--- salaries ---
Element at 0 = 1000.0
Element at 1 = 1200.0
Element at 2 = 1100.0
Массив в Swift это Struct
В Swift, массив в действительности является Struct (Структура) поэтому он имеет атрибуты и методы. Включая методы добавления элементов в массив или удаление элементов.
// Объявить массив String, с 2 элементами.
var languages = ["Java","C#"]
// Использовать метод append() чтобы соединить 1 элемент в конец массива.
languages.append("Swift")
// Можно так же использовать оператор += для соединения массива в конец текущего массива.
languages += ["C/C++", "Perl"];
Пример:
ExpaddingArrayExample.swift
import Foundation
func expaddingArrayExample() {
// Объявить массив String, с 2 элементами.
var languages = ["Java","C#"]
// Использовать метод append() чтобы соединить 1 элемент в конец массива.
languages.append("Swift")
// Можно так же использовать оператор += для соединения другого массива в конец.
languages += ["C/C++", "Perl"];
// Использовать цикл for-in.
for lang in languages {
print("Language: " + lang)
}
}
Запуск примера:
Language: Java
Language: C#
Language: Swift
Language: C/C++
Language: Perl
enumerate
Метод enumerate() массива возвращает объект EnumerateSequence struct. Каждый элемент EnumerateSequence включает информацию индекса, и элементы начального массива.
Смотрите больше про struct по ссылке:
Пример просмотра элементов массива:
EnumerateArrayExample.swift
import Foundation
import Cocoa
func enumerateArrayExample() {
// Объявить массив String с 3 элементами.
var languages :[String] = ["Java", "C#", "Swift"]
for (index, element ) in languages.enumerate() {
print("Element at \(index) = \(element)");
}
}
Запуск примера:
Element at 0 = Java
Element at 1 = C#
Element at 2 = Swift
No ADS