Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. Swift
Code

Ўвядзенне ў Swift: частка 1

by
Difficulty:BeginnerLength:LongLanguages:

Belarusian (беларуская мова) translation by Jenyia (you can also view the original English article)

На WWDC 2014 Apple прадставіла адно з самых вялікіх абнаўленняў для iOS з 2008 года з пункту гледжання распрацоўніка. Яны прадставілі HomeKit, HealthKit, CloudKit і пашырэння, проста каб назваць некалькі. Але самым вялікім сюрпрызам для WWDC 2014 стала ўкараненне цалкам новай мовы праграмавання Swift.

Swift - выдатная мова праграмавання, якая была пабудавана з нуля для эфектыўнасці і бяспекі. Яна выкарыстоўвае тыя ж API, што і Objective-C. Або, што вы можаце зрабіць у Objective-C, вы можаце зрабіць у Swift. У ім таксама прадстаўлены некаторыя новыя канцэпцыі, якія ацэняць дасведчаныя праграмісты, і некаторыя з якіх я распавяду ў гэтай уступнай серыі пра Swift.

У гэтай серыі я мяркую, што вы ўжо знаёмыя з Objective-C. У першым артыкуле гэтай серыі я раскажу пра філасофію Swift, структуру файла і сінтаксіс. У другом артыкуле я перайду да больш прасунутых аспектаў сінтаксісу Swift, такім як опцыі і кіраванне памяццю. Прыгатуйцеся, хлопцы, гэта будзе незабыўным.

1. Філасофія

Каб лепш зразумець Swift, Apple за апошнія некалькі гадоў стварыла нам умовы для структурных паляпшэнняў у Objective-C. Паляпшэння Objective-C, такія як кодавыя блокі, літэральныя масівы і слоўнікавыя вызначэння, і ARC (Automatic Reference Counting) - гэта ўсяго толькі некалькі рэчаў Apple, даданых у Objective-C, што палягчае пераход на Swift.

Адным з важных элементаў філасофіі Swift з'яўляецца ініцыялізацыя кода. Усе аб'екты і зменныя, вызначаныя ў Swift, павінны быць ініцыялізаваны ў кодзе. Неініцыялізаваны аб'ект або пераменная прывядзе да памылкі часу кампіляцыі ў Swift. Гэта гарантуе, што аб'ект або пераменная заўсёды мае значэнне. У Swift ёсць адзін спецыяльны выпадак, калі пачатковае значэнне не можа быць вызначана. У гэтым спецыяльным выпадку ваша пераменная называецца optional. Мы разгледзім варыянты ў другой частцы гэтай серыі.

Яшчэ адным важным кампанентам з'яўляецца галіновая паўната. Усе ўмоўныя галіны, няхай гэта будзе if або switch/case, павінны ахопліваць усе ўмовы. Такім чынам, ні адзін код не можа пацярпець няўдачу без яго ахопу. Адсутнасць ўмовы ў вашай галінцы зацвярджэння будзе ўстаноўлена і згенеруе памылку часу кампіляцыі.

Адным з апошніх элементаў філасофіі Swift з'яўляецца яго перавага канстант перад зменнымі. Swift вызначае зменныя і канстанты наступным чынам:

У прыведзеным вышэй прыкладзе ключавое слова let выкарыстоўваецца для вызначэння канстанты, у той час як ключавое слова var вызначае зменную. Зрабіўшы вызначэнне канстант такім простым, Apple па магчымасці заахвочвае выкарыстанне канстант. Гэта прыводзіць да больш бяспечнаму коду ў шматструменным асяроддзі і лепшай аптымізацыі кода, паколькі кампілятар ведае, што значэнне канстанты не зменіцца.

Зараз для Swift існуе значна больш некалькіх сінтаксісаў і паляпшэнняў фарматавання. Swift быў пабудаваны з нуля, каб выправіць мноства распаўсюджаных C/C ++ і, па сутнасці, крыніц Objective-C, такіх як:

  • індэксы па-за дыяпазону ў масівах
  • неініцыялізаваные дадзеныя
  • неправераныя тыпы вяртання
  • неправераны доступ да паказальніка
  • невідавочнае падзенне
  • памылкі goto

Як той, хто працуе як для iOS, так і для Android, я ведаю з першых рук, наколькі цікавей кадаванне для платформы iOS на самай справе з Cocoa і UIKit. Гэтая серыя пакажа вам, як значна больш задавальнення можа прынесці кадаваньне пры даданні Swift ў мікс.

2. Структура файла

У Objective-C у нас ёсць файлы загалоўкаў (.h) і файлы рэалізацыі (.m). Гэта тое, што Objective-C, атрымаў у спадчыну ад мовы C.

У Swift клас вызначаецца ў адным файле рэалізацыі (.swift), які ўключае ў сябе ўсё вызначэння і рэалізацыі класа. Гэта нагадвае іншыя мовы, такія як Java і C#.

Gone - гэта неабходнасць перахоплівання файлаў загалоўкаў і дадання pesky #IFNDEF у верхняй частцы файлаў загалоўкаў.

3. Сінтаксіс

Першае, што вы заўважыце ў Swift, - гэта знікненне кропкі з коскай ў канцы кожнага сцвярджэння. У Swift кожны радок лічыцца аператарам, і мы не павінны дадаваць кропку з коскай ў канцы кожнага радка.

Я падкрэсліваю неабходнасць, таму што нішто не перашкаджае вам дадаваць кропку з коскай ў канцы вашых сцвярджэнняў. Я буду працягваць дадаваць кропку з коскай ў канцы кожнага сцвярджэння, так як я думаю, што гэта павышае лёгкачытальнасць. Акрамя таго, сапраўды складана пазбавіцца ад звычкі дадаваць кропку з коскай, напрыклад, што робяць распрацоўшчыкі Cocoa ўжо шмат гадоў.

Яшчэ адна важная змена ў Swift заключаецца ў тым, што фігурныя дужкі з'яўляюцца абавязковымі для аператараў if. Гэта азначае, што больш няма Heartbleedbugs.

Сінтаксіс можа быць складаным прадметам для напісання. У Swift ёсць шмат тонкасцяў, якія могуць заняць вельмі шмат часу, але гэта не з’яуляецца мэтай гэтага артыкула. Для сцісласці я засяродджу увагу на зменах, якія б заўважыў распрацоўшчык Objective-C.

4. Падабенства з Objective-C

Я пачну з адлюстравання трох фрагментаў кода, якія ілюструюць некаторыя падабенствы з Objective-C. Гэта дапаможа вам у разуменні мовы Swift.

Праграмісты Objective-C выяўляюць, што Swift мае тыя ж самыя інструкцыі галінак і ітэрацый, з якімі вы ўжо знаёмыя, напрыклад, як if/else, for цыклаў, for..in цыклаў, і switch зацвярджэння.

Swift ўключае двух аператараў дыяпазону, .. < і ..., каб паказаць дыяпазон значэнняў. У вышэйпрыведзеным for цыкле мы выкарыстоўваем аператара полузамкнутого дыяпазону, ..<, каб паказаць дыяпазон значэнняў, які ўключае ў сябе 1, 2, 3 і 4, але выключае 5. Іншым аператарам дыяпазону з'яўляецца аператар замкнёнага дыяпазону, .... Ён задае дыяпазон значэнняў, які ўключае значэнне з абодвух бакоў аператара замкнёнага дыяпазону. Напрыклад, 1...5. задае дыяпазон значэнняў ад 1 да 5, уключаючы 5.

5. Вызначэнне зменных і канстант

Давайце вернемся да прыкладу, які я паказаў вам раней.

У Swift мы вызначаем канстанты, выкарыстоўваючы ключавое слова let і зменныя, выкарыстоўваючы ключавое слова var. Двукроп'е,: з'яўляецца маркерам для вызначэння тыпаў. У прыведзеным вышэй прыкладзе мы ствараем канстанту і зменную тыпу String.

Мы таксама ініцыялізуем канстанту і зменную з радком. У Swift радкі вызначаюцца сапраўды гэтак жа, як радкі C у Objective-C, яны не папярэдні знаку @.

Objective-C - строга тыпізаваная мова, што азначае, што тып зменнай ці параметру заўсёды павінен быць паказаны. Swift таксама з'яўляецца строга тыпізаванай мовай, але Swift трохі разумней, паколькі кампілятар выводзіць тып зменнай. Кампілятар таксама гарантуе, што без вашых дакладных ведаў і ўмяшання не адбудзецца некарэктнага размеркавання пераменных.

Калі мы перапішам прыведзены вышэй прыклад, дазваляючы зрабіць выснову пра тып сваёй працы, то фрагмент кода будзе выглядаць наступным чынам:

Гэта нашмат лепей, і код нашмат дакладней. Кампілятар досыць разумны, каб зразумець, што someInt - гэта Int і someFloat - гэта Double.

6. Радкі

Адзін са спосабаў атрымаць уяўленне аб сіле мовы - гэта вывучыць, як яна апрацоўвае маніпуляцыі з радком. Objective-C мае мноства функцый і функцый, якія дазваляюць нам апрацоўваць радкі, лепш, чым большасць моў, але яны, як правіла, неадназначныя і заблытваюцца час ад часу.

Пачнем з прыкладу Objective-C. Каб аб'яднаць два радкі ў Objective-C, мы робім наступнае:

У Swift, каб дадаць радок у іншы радок, мы выкарыстоўваем аператара +. Гэта вельмі проста.

Радкі ў Swift - гэта Unicode, што азначае, што мы можам напісаць:

Мы можам перабіраць сімвалы радкі, выкарыстоўваючы заяву for..in, як паказана ў наступным прыкладзе. Мы можам выкарыстоўваць цыкл for..in для паўтарэння радкоў Unicode. Гэта сапраўды выдатна.

Апошняе, што я хацеў бы распавесці аб радках, перш чым рухацца далей, - гэта інтэрпаляцыя радкоў. У Objective-C, калі мы хочам вывесці радок з зменнымі, мы выклікаем [NSString stringWithFormat:]. У Swift зменныя могуць быць укаранёныя. Зірніце на наступны прыклад.

Каб выкарыстоўваць інтэрпаляцыю радкоў, вы завяршаеце выклік зменнай ці функцыі ў круглых дужках і змяшчаеце зваротны слэш перад ёй, \( expression).

7. Масівы і слоўнікі

Array & Dictionary   

Як праграміст Objective-C, вы ўжо знаёмыя з масівамі і слоўнікамі. Swift таксама мае класы збору і дадае да іх некалькі дадатковых функцый.

Як вы карыстаецеся калекцыямі ў Swift? У Swift яны называюцца Array і Dictionary. Аб'яву масіва ў Swift аналагічна аб'яве литерала масіва ў Objective-C з выкарыстаннем набору квадратных дужак [ ], але без папярэдняга ім сімвала @.

Тое ж самае тычыцца слоўнікаў. Аднак замест выкарыстання фігурных дужак вы карыстаецеся квадратнымі дужкамі.

Видазмяняльнасць

Калі аб'ект Array эквівалентны аб'екту NSArray, а аб'ект Dictionary эквівалентны аб'екту NSDictionary, то як мы ствараем змяняемыя масівы і слоўнікі ў Swift?

Адказ вельмі просты, абвясціце аб'ект зменнай. Іншымі словамі, у папярэднім прыкладзе someArray з'яўляецца эквівалентам асобніка NSArray, а someOtherArray - асобнікам NSMutableArray. Гэта адносіцца і да слоўнікаў. У папярэднім прыкладзе someDictionary з'яўляецца эквівалентам асобніка NSDictionary і someOomeDictionary, які мае NSMutableDictionaryinstance. Гэта выдатна, праўда?

Хоць масівы Objective-C і слоўнікі могуць утрымліваць толькі аб'екты, у Swift калекцыі могуць утрымліваць аб'екты, а таксама прымітыўныя тыпы дадзеных, такія як цэлыя лікі і паплаўкі. Яшчэ адно важнае адрозненне ад Objective-C складаецца ў тым, што калекцыі ў Swift набіраюцца, відавочна або праз выснову тыпу падчас кампіляцыі. Паказаўшы тып аб'ектаў у калекцыі, Swift дадае дадатковую бяспеку для гэтых калекцый.

Нягледзячы на тое, што мы можам апусціць тып зменнай пры яе аб'яўленні, гэта не змяняе таго факту, што кампілятар прызначыць тыпы аб'ектаў у калекцыі. Выкарыстанне вываду тыпу дапамагае захаваць код выразным і лёгкім.

Мы можам перавызначыць аб'екты Array і Dictionary, якія мы абвясцілі раней, наступным чынам:

Кампілятар правярае калекцыі падчас іх ініцыялізацыі і выводзіць правільны тып. Іншымі словамі, ён разумее someArray і someOtherArray - гэта набор аб'ектаў String, а someDictionary і someOtherDictionary - гэта слоўнікі з ключамі тыпу String і значэннямі тыпу Int.

Маніпуляцыя з калекцыямі

Даданне аб'екта або іншага масіва ў масіў вельмі падобна на канкатэнацыю радкоў, паколькі мы таксама выкарыстоўваем аператар +.

Маніпуляванне слоўнікамі так жа проста.

Тыповыя калекцыі

Раней я згадваў, што наборы ў Swift надрукаваны, але што гэта значыць? Калі мы вызначаем калекцыю, якая змяшчае аб'екты String, вы можаце дадаваць аб'екты String толькі да гэтай калекцыі. Невыкананне гэтага правіла прывядзе да памылкі.

Давайце паглядзім на прыклад, каб растлумачыць гэта. Мы вызначаем набор аб'ектаў Car. Наступны фрагмент кода паказвае вызначэнне класа Car і cars змяняецца масівам, якія змяшчаюць тры асобнікі Car.

За кулісамі кампілятар выводзіць тып масіва. Калі мы хочам дадаць новы асобнік Car ў калекцыю, мы можам проста выкарыстоўваць аператар +, як паказана ніжэй.

Аднак даданне аб'екта іншага тыпу прывядзе да памылкі.

Гэта мае дадатковую перавагу бяспекі тыпаў для здабывання аб'ектаў з калекцый. Гэта таксама ліквідуе неабходнасць у размеркаванні аб'ектаў калекцыі перад іх выкарыстаннем.

У нашым прыкладзе аб'ект Car мае метад accelerate. Паколькі калекцыя ўведзена, мы можам захапіць элемент з масіва і адразу выклікаць метад аб'екта ў адным радку кода. Нам не трэба турбавацца пра тып элемента, паколькі калекцыя змяшчае толькі аб'екты Car.

Каб выканаць тое ж самае ў Objective-C з такім жа ўзроўнем бяспекі, нам трэба напісаць наступнае:

Нарэшце, для ітэрацыі масіва мы выкарыстоўваем цыкл for..in:

Для ітэрацыі слоўніка мы таксама выкарыстоўваем цыкл for..in:

Як вы можаце бачыць, тыпізаваных калекцыі - гэта магутная функцыя мовы Swift.

Выснова

Мы ўжо даволі шмат даведаліся пра мову Swift, і вы павінны выдаткаваць час, каб паглыбіцца. Я рэкамендую вам як мага хутчэй загрузіць Xcode 6 і пачаць прымяняць тое, што вы даведаліся ў гэтым артыкуле, у новай асаблівасці Playground Xcode. Playgrounds дазваляюць гуляць з Swift ў рэжыме рэальнага часу.

Вось і ўсё ў гэтым артыкуле. У наступным выпуску гэтай серыі мы разгледзім радкі, функцыі, завяршэнне, класы і, што не менш важна, дадатковыя. Вы таксама даведаецеся, як працуе кіраванне памяццю ў Swift. Заставайцеся з намі.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.