Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Swift 2.0
Search
Iain Smith
August 21, 2015
Programming
42
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Swift 2.0
Iain Smith
August 21, 2015
Other Decks in Programming
See All in Programming
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
16
3.5k
FDEが実現するAI駆動経営の現在地
gonta
1
110
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
2
880
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
170
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
0
120
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
190
AI 輔助遺留系統現代化的經驗分享
jame2408
1
1.2k
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
150
作るコストが小さくなった時代 幸せに働くために改めて考えたいこと 〜エンジニアとして価値を出し続けるために注視している二分野〜
yuppeeng
0
110
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
110
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
360
AIエージェントで 変わるAndroid開発環境
takahirom
2
680
Featured
See All Featured
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
270
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.4k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
72
40k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.3k
Building Adaptive Systems
keathley
44
3.1k
Technical Leadership for Architectural Decision Making
baasie
3
440
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
360
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
610
Mobile First: as difficult as doing things right
swwweet
225
10k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
400
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
220
Transcript
Swi$%2.0
h"p:/ /bit.ly/asos_swi1 Iain%Smith%(@_iains)
Today's(Outline • Swi%&==&Simple • New%features%in%Swi/%2.0 • Should(you(use(Swi.(in(Produc3on?
Adventures*in*Swi. Why$should$we$bother$with$Swi1?
[EveryoneLoves+bracketsRight:YES];
Stockholm)Syndrome?)1 1"Where"hostages"express"posi/ve"feelings"toward"their"captors
Apple's'Marke,ng Designed(for(Safety Fast%and%Powerful Modern,(markdown,(REPL,(Generics Objec&ve(C*Interoperability
Swi$%is%simple
Objec&ve(C*Example #import <Foundation/Foundation.h> #import <CoreGraphics/CoreGraphics.h> @class Animal; @interface Park :
NSObject @property (nonatomic, readonly) NSArray *animals - (Animal *)animalNearestPoint:(CGPoint)point; @end
Swi$%Example @import CoreGraphics class Park { private(set) var animals: [Animal]
= [] func animalNearestPoint(point: CGPoint) -> Animal? { // Method body omitted } }
Annotated(Objec-ve/C(Example #import <Foundation/Foundation.h> #import <CoreGraphics/CoreGraphics.h> @class Animal; @interface Park :
NSObject @property (nonatomic, strong, nonnull) NSArray *animals; - (nullable Animal *)animalNearestPoint:(CGPoint)point; @end
RX#Example#(Reac-ve#Cocoa) Objec&ve(C @interface NUKImageProcessor : NSObject - (RACSignal *)imageForBook:(Book *)obj;
// Internal - (RACSignal *)requestForBook:(Book *)obj; - (RACSignal *)processForBook:(Book *)obj; @end
RX#Example#(Reac-ve#Cocoa) Swi$ class ImageProcessor { func imageForBook(book: Book) -> Signal<UIImage,
NSError> {} //Internal func requestForBook(book: Book) -> Signal<ImageData, NSError> {} func processForBook(book: Book) -> Signal<UIImage, NoError> {} }
Swi$%let's%you%build%safe,%expressive% abstrac8ons.
Truth&is&ever&to&be& found&in&simplicity,&and& not&in&the&mul7plicity& and&confusion&of& things. —"Sir"Isaac"Newton
What’s'new'in'Swi-'2.0 New$Error$Handling$Model Powerful)control)flow)with)do,)guard,)defer,)and)repeat Protocol'extensions'and'default'implementa3ons
Think&Different! Pa#erns(in(Swi,
Error$Handling do { let str = try NSString(contentsOfFile: "Foo.bar", encoding:
NSUTF8StringEncoding) } catch let error as NSError { print(error.localizedDescription) }
Protocol'Extensions protocol APIEndpoint { var endpoint: String { get }
var base: String { get } } extension APIEndpoint { var url : NSURL { return NSURL(string: base+endpoint)! } }
enum SlackUsersEndpoint : APIEndpoint { case List case Info(SlackUser) var
endpoint: String { switch(self) { case .Info(let user): return "info?user=\(user.id)" case .List: return "list" } } var base: String { return "https://slack.com/api/users." } }
Extensions)on)Standard)Types protocol Sumable { init() func + (lhs: Self, rhs:
Self) -> Self } extension Int : Sumable {} extension Double: Sumable {} extension SequenceType where Generator.Element: Sumable { var sum: Generator.Element { return reduce(Generator.Element()) { $0 + $1 } } } [5, 3, 5, 1].sum [3.4, 4.5, 2.0].sum
Defer func processing() { self.delegate?.didStartProcessing() if (active) { if (encoding)
{ self.delegate?.didFinishProcessing } } else { self.delegate?.didFinishProcessing } }
func processing() { self.delegate?.didStartProcessing() defer { self.delegate?.didFinishProcessing } // code
emitted. }
Guard&&&Extensions
Availability if #available(iOS 8.0, OSX 10.10, *) { // Use
Handoff APIs when available. let activity = NSUserActivity(activityType:"com.example.ShoppingList.view") activity.becomeCurrent() } else { // Fall back when Handoff APIs not available. } @available(iOS 8.0, OSX 10.10, *) func startUserActivity() -> NSUserActivity { }
Ready&for&produc-on? • The%Tooling%problem • The%Compila1on%problem • The%Team%problem • The%Client/deadline%problem •
The%How%do%I%do%that%in%Swi9%problem?
Thank&You