Учебник Swift — разработка приложения для iOS8 [Часть 1, Hello World!]

Original author: Jameson Quave
  • Translation
  • Tutorial

Предисловие


Недавно Apple представила общественности достаточно важное изменение в разработке iOS приложений, анонсировав новый язык программирования Swift. Я принял решение: изучая этот язык пошагово, я буду в своих статьях рассказывать обо всём, что мне удалось найти. Это лишь первый пост из многих на эту тему, но я надеюсь, что вы решите изучать язык вместе со мной!

Весьма вероятно, что многие примеры кода, представленные в постах, будут позже изменены. Это отчасти потому, что мой стиль программирования – написать сейчас, чтобы проверить идею, а потом заняться рефакторингом, а также отчасти это потому, что для меня (как и для многих других) Swift – абсолютно новый язык программирования. Так что, скорее всего, как только я узнаю что-нибудь новое, ход этих уроков будет меняться.

Итак, я собираюсь начать с довольно простого приложения. Также я буду объяснять, как работает код. Готовы? Поехали…

UPD: Статья написана в соответствии с изменениями в XСode 6 Beta 5

Основы


Swift отменяет использование стандарта объявления переменных, который использует имя типа перед объявлением переменной, вместо этого для объявления, как и в JavaScript, применяется ключевое слово var.
Так, например, эта строка Objective-C
NSString *myString = @"This is my string.";

в Swift будет заменена на эту
var myString = "This is my string."

Для объявления констант используется ключевое слово let
let kSomeConstant = 40

В данном случае kSomeConstant неявно определяется как целое число. Если же вы хотите конкретизировать тип, то вы можете это сделать так:
let kSomeConstant: Int = 40

Немножко о Чистом Коде
Автор перевода рекомендует пользоваться вторым примером объявления констант. Довольно показательный пример описан в официальной документации:
let implicitInteger = 70
let implicitDouble = 70.0
let explicitDouble: Double = 70

В этом автор перевода солидарен с Helecta (см. соответствующий пост)

И массивы, и словари описываются с помощью []
var colorsArray = ["Blue", "Red", "Green", "Yellow"]
var colorsDictionary = ["PrimaryColor":"Green", "SecondaryColor":"Red"]

Это ещё далеко не всё, однако я считаю, что эти основы достаточно важны для дальнейшего чтения учебника. Итак, давайте перейдём к Hello, World!

Hello, World!


В первую очередь, мы напишем самое простое приложение, которое только можно представить, чтобы начать работу — Hello, World!
Наше приложение будет делать только одно: печатать фразу «Hello, World!» в консоль. Для этого нам потребуется установленная IDE XCode, для скачивания которой необходима учётная запись разработчика. Если у вас есть аккаунт, то смело качайте с официального сайта XCode 6 beta 4, желательно это сделать до прочтения ниже описанного.

Итак, вы установили свою копию IDE. Теперь давайте выведем «Hello, World!» на консоль.Этот пример не только демонстрирует простейшее приложение, которое можно написать, но и, что немаловажно, показывает, что среда разработки настроена правильно.
В XCode создайте проект с помощью шаблона приложения с одним видом («Single View Application»).

Убедитесь, что вы выбрали Swift в качестве языка приложения.

Теперь вы должны найти файл AppDelegate.swift в иерархии проекта. Внутри найдите следующую строку:
"// Override point for customization after application launch."

Замените эту строку на наш изумительный код:
println("Hello World")


Теперь нажмите «Run». Вы должны увидеть загрузившееся пустое приложение и слова Hello, World!, напечатанные в консоли, расположенной в нижней части окна XCode. Заметьте, это не будет отображаться в симуляторе iPhone.

Поздравляю! Вы только что написали своё первое приложение на Swift! Правда оно не получит никаких премий, призов, только ваши собственные овации. А теперь, давайте копнём немножко глубже…

Добавление Table View


В этом разделе мы попробуем добавить материал на экран. Откройте в XCode файл Main.storyboard, перенесите из Библиотеки Объектов («Object Library») объект Table View на экран приложения, растяните таблицу так, чтобы она совпала с краями. Затем измените высоту, перетянув верхний край, оставив небольшое пространство сверху (это необходимо для строки состояния). Если вы запустите приложение, то увидите в симуляторе пустую таблицу.

Теперь необходимо создать делегат и источник данных для таблицы. Это легче всего сделать в конструкторе интерфейса. Нажмите клавишу «Command», кликните и перетащите Table View к объекту View Controller в иерархии файла .storyboard, и выберите «источник данных» («data source»). Повторите с опцией «delegate».

Примечание:Я получил целую тонну вопросов о вышесказанном, т.к. многие люди сообщают о том, что у них не устанавливается табличный вид. Поэтому, я записал видео, поясняющее как работает подключение объектов Storyboard в коде. Для просмотра перейдите в полноэкранный режим и выберите опцию 720p, чтобы вы могли заметить всё, что вас интересует. Это будет немного отличаться от интерфейса XCode, но функционально всё работает также.


А теперь давайте углубимся в методы протоколов для табличного представления. Из-за использования UITableViewDataSource и UITableViewDelegate мы должны изменить определение класса.
Откройте файл и замените строку
class ViewController: UIViewController {

следующей
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

Если вы нажмёте клавишу «Command» и кликните на один из этих протоколов, то увидите «обязательные» функции. Для табличного представления необходимы как минимум эти две:
func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int
func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell!

Изменим наш класс View Controller путём добавления этих двух функций:
func tableView(tableView: UITableView!, numberOfRowsInSection section:    Int) -> Int {
   return 10
}

func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
   let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "MyTestCell")
 
   cell.textLabel.text = "Row #\(indexPath.row)"
   cell.detailTextLabel.text = "Subtitle #\(indexPath.row)"
 
   return cell
}


Первый метод возвращает количество строк в разделе. В нашем примере используется «магическое» число 10, однако вместо него, как правило, должна использоваться длинна контроллера массива. Наш же код умышленно упрощён.

Во втором методе происходит чистой воды волшебство. Мы создаём экземпляр класса UITableViewCell(cell), используя стиль ячейки Subtitle. Затем мы присваиваем текстовому значению этой ячейки значение "Row #\(indexPath.row)". В Swift подобным образом происходит встраивание значений переменных в строку без конвертации (таким образом, мы получим строки вида "Row #1", "Row #2")

Детализированная текстовая метка (detailTextLabel) доступна только при использовании класса ячеек Subtitle, который мы используем в данном примере.

При запуске приложения вы увидите восхитительный список ячеек с заголовками и подзаголовками, показывающие номера их строк. Это один из наиболее распространённых способов отображения данных в iOS, вы убедитесь, он вам ещё не раз пригодится. Увидеть полный текст кода вы можете на github.

В следующем посте мы исследуем использование API поиска iTunes для создания приложения, способного искать и отображать альбомы внутри iTunes Store.

Вопрос о дальнейшем переводе

Уважаемые Хабралюди! Если вы прочли этот перевод, помогите автору определиться с будущим цикла.
Для этого всего лишь требуется поучаствовать в опросе.

Only registered users can participate in poll. Log in, please.

Полезен ли перевод для вас?

  • 61.7%Да, перевод оказался полезен248
  • 11.7%Нет, перевод бесполезен47
  • 15.4%Не могу ответить однозначно62
  • 11.2%Не интересуюсь Swift45

Стоит ли переводить следующие статьи цикла?

  • 74.8%Конечно стоит! Ведь так мало материалов на русском по Swift-у317
  • 12.5%Нет, не стоит, достаточно англоязычных материалов53
  • 12.7%Интересно почитать, однако для меня это бесполезно54
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 31

    +2
    Насколько мне известно нужно сначала учить Objective-C, а затем уже Swift. Учитывая то что есть знание одного языка проблем с другим не будет.
      +1
      Подробнее по этой проблеме здесь.
      Конечно, гораздо лучше сначала изучить C, а затем C++, однако многие изучают C++ не зная C. C Objective-C и Swift то же самое.
        +6
        Ну и третий же комментарий по вашей ссылке очень в тему. Не получится писать только на свифте, ну никак.
          +1
          Пишу проект, только на Swift. После выхода iOS 8 публично выкачу исходники и большую статью по разработке этого приложения.
          Пока всё, что мне пришлось делать — добавить bridging-header и всё. Посмотрим, что же дальше будет, но всё не так печально, как пишут.

          Смотрите новости здесь: developer.apple.com/swift/blog/
            +2
            Я тоже пишу проектик чисто на свифте, но мы оба знакомы с Objective-C. Мы можем посмотреть в исходники чужой библиотеки и понять как она работает. Это и есть ключевое отличие.

            > Не получится писать только на свифте, ну никак.

            Здесь я недостаточно ясно выразился: не получится писать без знания ObjC.
              0
              Ах, в этом плане. Да, тогда вы правы.
      +1
      Уважаемые Хабралюди! Прошу вас отставлять все замечания в комментариях, хочется исправиться в следующих моих статьях
        0
        А какие системные требования для XCode 6 beta 4? У меня есть виртуалка с MacOSX Snow Leopard, для экспериментов с ObjC мне хватало, а для Swift я так понимаю уже не подойдет?
          0
          Если я не ошибаюсь, то для XCode 6 beta 4 необходима как минимум OS X 10.9.3.
          Apple подтверждает
            –4
            Жалко… у меня она скорее всего просто не поставится ввиду небольшого количества памяти в ноутбуке. Остается только надеяться что Apple откроет исходники Swift и энтузиасты портируют на ранние версии macosx или даже на linux.
              0
              Поддерживаю. Однако следует учесть, что Swift сейчас дорабатывается, изменяется… Значит, этого момента придётся ждать достаточно долго…
                0
                У меня с 2 Гб стоит 10.9.4.
            +6
            1. На Swift можно не только под iOS 8 писать
            2. К чему эти основы?
            3. println(«hello world»), а потом сразу таблицы? серьезно? это точно туториал?
            4.
            Тем самым мы добавим в класс-наследник ещё два класса-родителя

            Что-что-что? Еще два родителя?
            5. т.д.

            Хотелось бы увидеть какую-то структурированность, план.
              0
              1. Согласен, однако статья посвящена именно разработке под iOS8.
              2. Эта статья — точный перевод оригинала, ничем от него не отличается, отсебятины никакой нет.
              3. Точно :) Hello Word, по моему мнению, предназначен не столько для тех, кто только-только начинает изучение Swift, сколько для проверки IDE.
              4. Согласен, исправил.
              5. см п.2
                +2
                1. Чем же разработка именно этого приложения под iOS 8 отличается от разработки такого же приложения под iOS 7?
                2. Дело не в том, есть ли отсебятина здесь или нет, а в целостности и структурированности статьи. Здесь, чес слово, намешали.
                3. Для проверки IDE? Для написания Hello World есть playground.
                  –1
                  1. Признаюсь честно — следующие статьи цикла не смотрел, поэтому не могу однозначно утверждать, что есть отличия.
                  2. Возможно. Попытаюсь это всё исправить, сделать статью чуть-чуть читабельней.
                  3. Вероятнее всего, это попытка ввести в курс дела начинающих разработчиков (Вы должны увидеть загрузившееся пустое приложение и слова Hello, World!, напечатанные в консоли. Заметьте, это не будет отображаться в симуляторе iPhone.)
                    0
                    Насчёт п.2 — кое-что исправил, но всё-таки исправления «косметические». В дальнейшем попробую не только переводить, но и исправлять.
              0
              Спасибо за статью. Хотелось бы поинтересоваться у уважаемого сообщества — если ли на данный момент в AppStore приложение для iOS написанное полностью на Swift? Хочу поковырять бинарники и посмотреть что у таких приложений внутри :) Может статью запилю по итогам.
                0
                Соберите какой-нибудь сэмпл да ковыряйтесь на здоровье)
                  +1
                  Семпл — это само собой конечно :) Но реальное приложение со сложной иерархией классов и всеми костылями, которые разработчики обычно ставят для разных задач (и до которых в семпле часто просто не додумываешься, что так вообще можно написать код) — это тоже было бы очень полезно для понимания «как оно там все устроено». Поэтому буду крайне признателен за ссылку на реальное приложение.
                  +2
                  Поищите в github.com
                  Вот, например, несколько ссылочек, проекты полностью на Swift: Игра «2048», Flappy Bird, Игра «Flight Flight», Шрифты iOS и т.д.
                +1
                Теперь я умею писать в консоль и вязать IBOutlet'ы, ух!
                  +1
                  Из codeschool понял, что такого рода статьи, мало чему учат. Если ошибка в архитектуре то ее будут дублировать во многих проектах, пока ученик не поймет, что так делать не нужно.
                    0
                    Полностью согласен. Опыт не заменит никаких книг/статей/руководств. Грустнее всего что издают подобные книги (типа «C++ для чайников», «Приложение для Android за неделю»).
                    +2
                    Статья ужасна по всем критериям!
                    1. Чему она должна учить? Языку Swift или созданию приложений под iOS? Определитесь, потому что это совсем разные вещи. (и поэтому так бестолково выглядит «введение в переменные Свифта» и тут же прыжок в создание helloworld)
                    2. «Я получил целую тонну вопросов о вышесказанном...» — раз текст изначально написан небрежно, может имеет смысл исправить текст, а не выпускать поясняющее видео? У людей не получается, потому что нужно детально описывать что у вас выделено на экране, куда-кого тащить и какие при этом зажимать кнопки.
                    3. Вы начинаете со совсем уж примитивщины типа «а вот этот let — константа, товарищи!», но при этом полностью опускаете важные термины типа «источник данных», «storyboard», «View Controller» и тут же вмонстрячиваете новичку MVC приложение! Не крутоват прыжок?
                    4. А почему вообще мы должны использовать MVC? Может, я «перделки» пишу, мне эти MVC не упали (тем более, что это далеко не везде подходящая архитектура). Не лучше ли объяснить новичкам, что им навязали эту архитектуру и рыпаться никуда больше нельзя? (а если можно, то это и надо указывать в первую очередь!)
                    5. «Чтобы увидеть полный текст кода нажмите на эту ссылку.» — ребят, Интернету 20 лет, а вы всё пишете так, будто у вас бумажная книга! Ссылки для кого придумали? :) Не «вот эту ссылку», а само предложение постройте правильно и дайте ссылку с ключевых слов. В вашем случае: «Исходный текст доступен на {ссылка}гитхабе{/ссылка}».
                    6. ТАКИЕ статьи переводить не нужно, бестолковщина и сумбур. Ну разве что покармадрочить.
                      0
                      1. На странице оригинала есть обсуждение, вы можете оставить свои замечания автору.
                      2. Про ссылку уже исправил, спасибо за замечание, постараюсь исправиться.
                        0
                        Даже не читал пункты! Поддерживаю, такие статьи — мусор.
                        –2
                        Не понимаю, почему для объявления функции было выбрано непривычное «func», а не «function» или «def»
                          0
                          Для кого-то и def непривычное. А function — слишком много писать.

                        Only users with full accounts can post comments. Log in, please.