SWIFT нужен ли он вам?

Post on 11-Apr-2017

185 views 1 download

Transcript of SWIFT нужен ли он вам?

SWIFTНужен ли вам он

и как начать использовать

Александр ЧернышевSenior iOS developer

КТО ЗДЕСЬ?

КТО ЗДЕСЬ?DEVELOPER

TEAM LEAD

PM

ДИРЕКТОР ПРОИЗВОДСТВА

TECH LEAD

ЧТО VS КАК

ЛИКБЕЗ

Ай да Крис, ай да сукин сын!

Крис Латтнер, Apple• Начал в 2010• Представили на WWDC летом

2014• Официально запустили

осенью 2014 • Язык набирает свою

аудиторию

Objective-C, но без C• язык для среднестатистического

программиста• + способ учиться написанию

самостоятельно• Синтаксис Swift более

привычный, чем Objective-C• Содержит инструменты защиты

от ошибок и багов

Реально быстрый• Лучше понимает действия автора кода и делает его работу

эффективнее• Дает делать больше за меньшее количество времени

(пример с переменной целое и нецелое число). • Игровые площадки

– SWIFT Playgrounds – помогают быстрее видеть результат

Популярные библиотеки уже переписали на Swift• PromiseKit• Alamofire (AFNetworking + Swift)• Reachability• ActiveRecord• GCDKit

И не только библиотеки :)

Зачем оно мне надо?Крис Латтнер – единственный человек в мире с четырехлетним опытом программирования на Swift…

нет шансов не быть вторым!

ПОГРУЖАЕМСЯ?

Можно встраивать Swift в Objective-C и наоборот

Swift Objective-C

Interoperability

Mix and match

Migration from existing Objective-C code

Interoperability Objective-C types >> Swift types

(как id >> AnyObject)

Objective-C core types >> Swift core types (как NSString >> String)

Matching concepts(как pointers >> optionals)

Нужно создать Objective-C или C wrapper для C++ кода

Initialization

OBJECTIVE-C

UITableView *myTableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];

SWIFT

let myTableView: UITableView = UITableView(frame: CGRectZero, style: .Grouped)

Factory initialization

OBJECTIVE-C

UIColor *color = [UIColor colorWithRed:0.5 green:0.0 blue:0.5 alpha:1.0];

SWIFT

let color = UIColor(red: 0.5, green: 0.0, blue: 0.5, alpha: 1.0)

id Compatibility

SWIFT

var myObject: AnyObject = UITableViewCell()myObject = NSDate()

let futureDate = myObject.dateByAddingTimeInterval(10)let timeSinceNow = myObject.timeIntervalSinceNow

SWIFT

myObject.characterAtIndex(5)// crash, myObject doesn't respond to that method

let myChar = myObject.characterAtIndex?(5)if let fifthCharacter = myObject.characterAtIndex?(5) { println("Found \(fifthCharacter) at index 5")}

Closures

void (^completionBlock)(NSData *, NSError *) = ^(NSData *data, NSError *error) {/* ...

*/}

Появляются сайты вроде http://fuckingblocksyntax.com

Удобно классно просто

let completionBlock: (NSData, NSError) -> Void = {data, error in /* ... */}

Встраивание Swift в Objective-C@objc attribute

@objc func playSong(name: String) - (void)playSong:(NSString *)name

@objc init (songName: String, artist: String) - (instancetype)initWithSongName:(NSString *)songName artist:(NSString *)artist

class Белка { init (имя: String) { /*...*/ } func прячьОрехи(Int, вДереве: Дерево) { /*...*/ }}

@objc(Squirrel)class Белка { @objc(initWithName:) init (имя: String) { /*...*/ } @objc(hideNuts:inTree:) func прячьОрехи(Int, вДереве: Дерево) { /*...*/ }}

Integrating with Interface Builder

Working with Outlets and Actions

class MyViewController: UIViewController { @IBOutlet weak var button: UIButton! @IBOutlet var textFields: [UITextField]! @IBAction func buttonTapped(AnyObject) { println("button tapped!") }}

Live Rendering@IBDesignable и @IBInspectable

Integrating with Interface Builder

@IBDesignableclass MyCustomView: UIView { @IBInspectable var textColor: UIColor @IBInspectable var iconHeight: CGFloat /* ... */}

Встраивание Swift в Objective-C-Bridging-Header.h

#import "MyCustomView.h”

let myView = MyCustomView()myView.backgroundColor = UIColor.redColor()

Встраивание Swift в Objective-C-Swift.h

#import “-Swift.h”

MySwiftClass *swiftObject = [[MySwiftClass alloc] init];[swiftObject swiftMethod];

Migrating Your Objective-C Code to Swift

Mix-and-matchInteroperabilityMigration

ВНЕДРЕНИЕ

1. Крутая команда• Гибкость мышления• Желание изучать что-то новое• Наслаждение процессом• Работа не ради денег, а ради результата • Возможность приостановить производство

(вывести пару человек из производства)

2. Подходящий проект• Лояльный клиент • Гибкие сроки• В идеале — свой продукт

3. Поддержка руководства• Дальновидность• Желание работать на перспективу• Умение управлять изменениями

НА КАКОМ ЭТАПЕ МЫ СЕЙЧАС

ВОПРОСЫ?

Александр Чернышевchernyshev@improveitgroup.com