Upload
improve-group
View
185
Download
1
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 и наоборот
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. Поддержка руководства• Дальновидность• Желание работать на перспективу• Умение управлять изменениями
НА КАКОМ ЭТАПЕ МЫ СЕЙЧАС
ВОПРОСЫ?
Александр Чернышев[email protected]