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
0
40
Swift 2.0
Iain Smith
August 21, 2015
Tweet
Share
Other Decks in Programming
See All in Programming
Package Management Learnings from Homebrew
mikemcquaid
0
220
登壇資料を作る時に意識していること #登壇資料_findy
konifar
4
1.1k
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
7
2.8k
カスタマーサクセス業務を変革したヘルススコアの実現と学び
_hummer0724
0
690
CSC307 Lecture 04
javiergs
PRO
0
660
React 19でつくる「気持ちいいUI」- 楽観的UIのすすめ
himorishige
11
7.4k
2026年 エンジニアリング自己学習法
yumechi
0
130
OCaml 5でモダンな並列プログラミングを Enjoyしよう!
haochenx
0
140
360° Signals in Angular: Signal Forms with SignalStore & Resources @ngLondon 01/2026
manfredsteyer
PRO
0
120
AIによる開発の民主化を支える コンテキスト管理のこれまでとこれから
mulyu
3
250
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
6k
CSC307 Lecture 03
javiergs
PRO
1
490
Featured
See All Featured
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
300
HDC tutorial
michielstock
1
370
Music & Morning Musume
bryan
47
7.1k
Balancing Empowerment & Direction
lara
5
890
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2k
The Pragmatic Product Professional
lauravandoore
37
7.1k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
120
From π to Pie charts
rasagy
0
120
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
110
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
64
30 Presentation Tips
portentint
PRO
1
210
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
170
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