53

2014.12.06 01 Александр Чернышев — Нафига Козе Баян или нужен ли вам swift, и как начать его использовать

Embed Size (px)

Citation preview

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и наоборот

SwiftObjective-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

@IBDesignable class MyCustomView: UIView {

@IBInspectable var borderColor: UIColor =

UIColor.clearColor()

@IBInspectable var borderWidth: CGFloat = 0

@IBInspectable var cornerRadius: CGFloat = 0

}

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

#import "MyCustomView.h”

let myView = MyCustomView()

myView.backgroundColor = UIColor.redColor()

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

#import “-Swift.h”

MySwiftClass *swiftObject = [[MySwiftClass alloc]

init];

[swiftObject swiftMethod];

Migrating Your Objective-C Code to Swift

Mix-and-match

InteroperabilityMigration

ВНЕДРЕНИЕ

1. Крутая команда

• Гибкость мышления

• Желание изучать что-то новое

• Наслаждение процессом

• Работа не ради денег, а ради результата

• Возможность приостановить производство (вывести пару человек из производства)

2. Подходящий проект

• Лояльный клиент

• Гибкие сроки

• В идеале — свой продукт

3. Поддержка руководства

• Дальновидность

• Желание работать на перспективу

• Умение управлять изменениями

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

Александр Чернышев[email protected]