Статьи

Первый взгляд на Swift и Xcode 6 – приложение за десять минут!


Пока я размышлял над тем, что дальше добавить в 
Nodality , я подумал, что мне потребуется некоторое время, чтобы изучить 
Swift  и поиграть с 
Xcode 6 . Если вы не знаете, Swift — новый язык программирования Apple для iOS и OS X. Для старого таймера ActionScript, такого как я, гораздо удобнее Objective C, и, в отличие от разработки на AS3 и AIR, он дает мне немедленный доступ ко всем замечательным функциям iOS, таким как 
SpriteKit , SceneKit и 
Metal .


Итак, мой первый одноразовый проект — это глупый калькулятор, содержащий два горизонтальных ползунка для установки значений и сегментированный элемент управления кнопками (аналогично кнопочной
панели Flex 
) для выбора оператора. Смена ползунка или сегментированной кнопки обновляет большую метку с результатом расчета.

Для начала я использовал доску Xcode для создания пользовательского интерфейса с помощью перетаскивания. FlashBuilder больше не имеет дизайна, поэтому я забыл, насколько это просто. В XCode также есть замечательные 
помощники по выравниванию в
Illustrator, поэтому мой простой пользовательский интерфейс выглядит довольно неплохо:

XCode уже создал мне 
 класс
ViewController , поэтому следующим шагом будет создание ссылок на элементы управления UI. Это делается с помощью перетаскивания элемента управления из представления дизайна в представление кода:

Маленькая синяя линия указывает, куда Xcode добавит свою ссылку. Прежде всего, мне нужно создать 
Outlets , в этом примере я предполагаю, что ближайшая аналогия Flex — это то, что розетка похожа на 
SkinPart. После отпускания мыши я получаю эту маленькую выноску, которая позволяет мне назвать розетку:

Который создает строку кода, подобную этой:


@IBOutletweakvar sliderOne: UISlider!

Теперь, когда у меня есть ссылка на элементы управления пользовательского интерфейса, я могу начать писать код. В 
ViewController  я хочу установить минимальное и максимальное значения ползунков и установить оператор по умолчанию. Я делаю это мой переопределенный 
viewDidLoad ()  — который вызывается после загрузки представления, natch — и добавления моей собственной функции, 
setUpUserInterface () .

   

1.
override func viewDidLoad()
2.
    {
3.
       super.viewDidLoad()
4.
        
5.
       setUpUserInterface();
6.
 
7.
   }

Каждый разработчик ActionScript поймет код внутри 
setUpUserInterface () :


   приватный функционал setUpUserInterface () -> Void
   
{

01.
    sliderOne.minimumValue = 0;
02.
    sliderOne.maximumValue = 100;
03.
     
04.
    sliderTwo.minimumValue = 0;
05.
    sliderTwo.maximumValue = 100;
06.
     
07.
    operatorButton.selectedSegmentIndex = 0;
08.
 
09.
}

Единственное отличие состоит в том, что в возвращаемом типе функции используется «->», а не «:» (а поскольку Swift выводит тип, это совершенно не нужно), а 
 ключевым словом
функции является 
func .

С AS3 я бы теперь начал добавлять слушателей событий, чтобы реагировать на жесты пользователя. Они обрабатываются 
действиями  в Swift и создаются методом синей линии, перетаскиваемым с помощью элемента управления, который я использовал для создания торговых точек. Если я изменяю тип соединения на action, выноска выглядит немного иначе (я открыл комбо событий, чтобы показать разные обработчики, которые можно создать):

Теперь у нас есть метод действия, который после добавления нескольких строк кода выглядит следующим образом:


   @IBAction func sliderOneChange (отправитель: AnyObject)
{
       labelOne.text = NSString(format: "%.2f", sliderOne.value);
       updateTotal();
 }
Finally, after adding 

event handlers

, oops, actions, to all my controls, an 
updateAll()
 function uses a switch statement, again almost identical to AS3, to display the calculation depending on the sliders and segmented button (and display in red, if the value is negative):
 private func updateTotal() -> Void
    {
       var total:Float;
       
       switch(operatorButton.selectedSegmentIndex)
        {
           case 0:
                total = sliderOne.value + sliderTwo.value;
           case 1:
                total = sliderOne.value - sliderTwo.value;
           case 2:
                total = sliderOne.value * sliderTwo.value;
           case 3:
                total = sliderOne.value / sliderTwo.value;
           default:
                total = 0;
        }
       
       resultLabel.textColor = total < 0 ? UIColor.redColor() : UIColor.blackColor();
       resultLabel.text = NSString(format: "%.2f", total); 

   }
  
Xcode 6 поставляется в комплекте с Git-клиентом, так что спустя мгновение мой первый эксперимент со Swift 
благополучно хранится на GitHub для всех желающих
.

Я буду регулярно вести блог, пока изучаю Swift, а также часто пишу в Твиттере — присоединяйтесь ко мне в моем путешествии по адресу: 
@FlexMonkey .