Bulgarian (Български) translation by Mihail Petrov (you can also view the original English article)
В първата статия, основи на Swift, ви запознах какво е Xcode и как да напишете първите си няколко реда Swift код В настоящата статия ще ви покажа как се използват променливи и типове данни в програмният език Swift Ще разгледаме подробно константите както и ще ви обясня защо е силно препоръчително да ги ползвате колкото се може по често
В следващите няколко урока от серията ще ползваме активно възможностите на средата Xcode за да научим основите на програмният език Swift Както вече видяхте програмната среда ни дава възможност да бързо да експериментираме с възможностите на езика
Ще започнем със създааваане на нов проект, в рамките на работната ни среда. Препоръчвам ви да пишете код докато четете статията. Най-добре се учи нов език за програмиране докато се използва на практика.
Стартирайте Xcode 6+ и създайте нов проект изберете New > Playground от менюто FIle Въведете името на проекта. В опцията за платформа Platform изберете iOS и изберете бутона Next Изберете директорията в който искате да съхраните проекта си и натиснете Create



За целите на нашият урок, ще започнем на чисто, така че изтриете цялото съдържание на проекта. В предишният урок вече видяхме как да ползваме променливи, но нека сега обърнем повече внимание на детайлите за да разберем същността им.
1. Промениви
Деклариране на променливи
За да декларираме променлива ползваме ключовата дума var
Въпреки че този синтаксис силно прилича на начина
по който декларирането на променливи се извършва в другите езици за
програмиране, силно ви препоръчвам да се абстрахирате от опита си с
други подобни технологии. Съществуват няколко основни разлики :*
Ключовата дума var
е единственият механизъм за деклариране на променливи в Swift Конструкцията е тривиална, ключовата дума var
предшества името на променливата на който се присвоява определена стойност
1 |
var street = "5th Avenue" |
Запомнете, че не завършваме израза с точка и запетая. Въпреки че символа точка и запетая е опционален, когато пишем Swift приложения, силно препоръчително е да избягваме употребата му.
Също така можем да забележим че не е необходимо да декларираме тип, на нашата променлива. В този ред на мисли е време да ви споделя една от интересните възможности на Swift типовата инферентност (type inference)
Типова инферентност (type inference)
Декларирахме променлива street
и й присвоихме стойност 5th Avenue
Ако имате опит с езици като JavaScript и PHP то може би си мислите че Swift е без типов или слабо типизиран език за програмиране, но истината не е съвсем такава. Искам да подчертая че Swift е силно типизиран език за програмиране Наличието на фактически типове и тяхната проверка по време на работата на приложението е един от основните аспекти на технологията
Понеже тепърва навлизаме в езика, ще ви покажа малко от магията му. Въпреки че горният израз не декларира изрично, че променливата street
е от низов тип String
Това е пример за типова инферентност. Стойността, която присвояваме на променливата е от низов тип Swift е достатъчно умен, за да предвиди че щом стойността е от този тип то и променливата трябва да бъде от същият
Следващият израз ще ни предостави същият резултат, с тази разлика че този път ние изрично ще дефинираме типа на променливата Горнит израз, изрично казва че променливата stree
е от низов тип (String
)
1 |
var street: String = "5th Avenue" |
Swift ви дава възможност да използвате и двата подхода при дефиниране на типа на променлива и константа. Ако не го направите ще получите съобщение за грешка. Можете да видите резултата като декларирате променлива без тип и без стойност
1 |
var number |
Този израз ще бъде напълно валиден в езици като PHP или JavaScript но не и в Swift. Причината е проста. Въпреки че декларирахме променлива с помощта на правилната ключова дума var
, пропуснахме да специфицираме нейният тип Интерпретатора на езика не е способен да прецени какъв е типа на променливата понеже не е присвоена стойност към нея. Ако кликнете върху съобщението за грешка, Xcode ще ви даде подробно информация какъв е проблема.



Можем да премахнем проблема като присвоим стойност на променливата, или изрично специфицираме нейният тип. Изрично ще декларираме променливата да е от тип number
. Както виждате грешката изчезна Примера показва че променливата number
е от низов тип
1 |
var number: String |
Промяна на типа
Какво вече видяхте, присвояването на нови стойности към вече съществуваща променлива е тривиална операция.
1 |
var street: String = "5th Avenue" |
2 |
var number: String |
3 |
|
4 |
street = "Main Street" |
5 |
number = "10" |
Няма ли да е по-лесно да присвоим числото 10
на променлива от тип number
Няма нужда да съхраняваме номера на улицата като низова стойност. Нека видим какъв ще бъде резултата.
1 |
var street: String = "5th Avenue" |
2 |
var number: String |
3 |
|
4 |
street = "Main Street" |
5 |
number = 10 |
Ако присвоим целочислена стойност на променливата number
Xcode ще ни върне съобщение за грешка. За съжаление този път не можем да получим достатъчно информация от предоставеното ни съобщение Причината за съобщението е че се опитваме да присвоим числова стойност на променлива която е декларирана с тип String
Обикновено това не е проблем при слабо типизираните езици, но е проблем в Swift
Както вече споменахме, Swift е силно типизиран език за програмиране, което означава, че всяка променлива има специфичен тип, който не може да се променя в хода на програмата. Това е доста важна концепция, обмислете я добре, преди да продължите.
За да елиминираме грешката се налага да сменим типа на променливата number
на Int
Нека разгледаме примерният код, след актуализацията.
1 |
var street: String = "5th Avenue" |
2 |
var number: Int |
3 |
|
4 |
street = "Main Street" |
5 |
number = 10 |
Обобщение
Ваажно е да запомните, че променливите се декларират с ключовата дума var
, като не е необходимо изрично да специфицирате техният тип. Въпреки това е важно да запомните че всяка променлива и констата има тип. Ако типът не е явно дефиниран, ще получите грешка от интерпретатора на езика. Всяка променлива има тип, който не може да бъде променян след декларацията на променливата.
2. Константи
Константите приличат на променливите, по отношение на правилата, които се прилагат за работа с техните типове. Единствената разлика е, че стойността на константите не може да бъде променяна, поради факта че, стойността на една константа е константа.
Деклариране на константи
Използваме ключовата дума let
. Нека разгледаме пример, в който ще декларираме константата street
,
1 |
let street: String = "5th Avenue" |
2 |
var number: Int |
3 |
|
4 |
street = "Main Street" |
5 |
number = 10 |
като заменим var
с let
. Xcode ще ни върне съобщение за грешка. Не може да променяме стойносттите на константите. За да премахнем грешката, просто трябва да премахнем или закоментираме израза в който променяме стойността на street
Употреба на константи
Декларирането на константи е тривиална операция , който не изисква сложни синтактични конструкции. еквивалентен на процеса по деклариране на променлива.
Употребата на константи в езика се насърчава, когато предварително е известно, че стойността, която искаме да пазим, няма да претърпи изменение. На лице са множество предимства при използването на този подход, като на първо място това е сигурността. Употребата на константи гарантира ограничен достъп до стойностите с който работи вашето приложение.
3. Типове данни
Програмните езици обикновен но предоставят широк набор от типове за съхранение на низови последователности, целочислени стойности, стойности с плаваща запетая и други Swift предоставя оганичен брой типове както следва
Int
Float
Double
String
Character
Bool
Важно е да се отбележи, че изброените типове не са базови или примитивни типове Това са именувани типове, които са имплементирани в Swift с помощта на структури Ще разгледаме подобно структурите, в рамките на серията от уроци, но е важно да запомните че типовете, с които работихме в настоящият урок, не са еквивалентни на примитивните типове, които може би сте ползвали в езици като Objective-C например.
В рамките на серията ще обърнем внимание и на други структури от данни имплементирани в Swift, като например тупали, масиви и речници.
4. Конвертиране на типове
Последната тема която ще обсъдим е конвертиране на типове. Нека вземем за пример следният код написан на Objective-C Резултата е 314.000000
1 |
int a = 100; |
2 |
float b = 3.14; |
3 |
|
4 |
NSLog(@"%f", (a * b)); |
Интерпретатора на Objective-C ще конвертиа стойността на променливата a
към число с плаваща запетая, като след това ще го умножи със стойността на променливата b
Нека напишем, примерният код с помощта на Swift
1 |
var a = 100 |
2 |
var b = 3.14 |
3 |
|
4 |
println(a * b) |
като ще игнорираме функцияна println
на този етап Първо искам да се съсредоточим върху умножението на двете променливи a
и b
Типът на a
е Int
а на b
съответно Double.
В момента в който настъпва умножението на двете стойности, става ясно че типовете им не съвпадат, което е проблем за Swift. не е напълно ясно какъв ще е типът на резултата. целочислена стойност или стойност с плаваща запетая.
За да решим проблема трябва да се уверим че и двата операнда са с еднакви типове защото Swift няма да се погрижи за изричното им конвертиране. Съществува набор от глобални функции, които ни помагат в подобни ситуации. В примера използваме функцията Double
за конвертиране стойноста на променливата a
към число с плаваща запетая и по този начин елиминираме грешката.
1 |
var a = 100 |
2 |
var b = 3.14 |
3 |
|
4 |
println(Double(a) * b) |
Обърнете внимание че типът на променливата а
не се е епроменил Кода който разгледахме прилича на операция по кастване на типове, но всъщност не е това. Функцията Double
взима стойността на променливата а
и я връща като стойност от тип Double
, която да се ползва в операцията по умножение продуцираща резултат от тип Double
.
Запомнете Swift не прави неявно конвертиране на типовете на стойностите на променливите и константите Това е доста важна концепция, която трябва да запомните.
5. Визуализиране на информация
В предишният пример видяхме функцията println
, която има за цел да визуализира информация на екрана и да добави нов ред. Също така можете да ползвате и функцията print
която прави абсолютно същото с тази разлика, че не добавя нов ред, към визуализираната информация
Ползването и е тривиално просто извикайте функцията println
и подайте стойността, която искате да визуализирате, като аргумент. Аргумента може да бъде променлива, константа, израз или литерал. Разгледайте примера.
1 |
var string = "this is a string" |
2 |
let constant = 3.14 |
3 |
|
4 |
println(string) |
5 |
println(constant) |
6 |
println(10 * 50) |
7 |
println("string literal") |
Виждате че също така е възможно да използвате и низова интерполация за да комбинирате, променливи, константи, изрази и литерали в едно. Тази операция може да се извърши като оградим желаният от нас елемент Доста удобно.
1 |
let street = "5th Avenue" |
2 |
let number = 10 |
3 |
|
4 |
println("She lives at \(street) \(number).") |
Научете повече в нашият курс по програмиране със Swift
Ако се интересувате от по задълбочено изучаване на материята, разгледайте нашият подробен курс по разработка на приложения със Swift
Този базов урок ви дава малко по задълбочена представа за това как да ползвате променливи и константи, както и как да заделяте памет за съхранение на различни типове данни.
Заключение
Изключително важно е да добиете силна представа за начина по който Swift работи с променливите и константите. Възможно е част от концепциите да ви се стоят чужди, но постарайте се да разгледате примерите още няколко пъти и ще придобиете солидна основа за разбиране на проблематиката. По този начин ще направите кода си по качествен и лесен за четене. В следващият урок от серията, ще се запознаем с колекциите в Swift