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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
Vibe Coding - AI 驅動的軟體開發
mickyp100
0
170
Oxlint JS plugins
kazupon
1
920
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
560
CSC307 Lecture 06
javiergs
PRO
0
680
CSC307 Lecture 01
javiergs
PRO
0
690
Automatic Grammar Agreementと Markdown Extended Attributes について
kishikawakatsumi
0
190
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
1
2.5k
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
6
1.8k
Fragmented Architectures
denyspoltorak
0
150
Patterns of Patterns
denyspoltorak
0
1.4k
Oxlintはいいぞ
yug1224
5
1.3k
開発者から情シスまで - 多様なユーザー層に届けるAPI提供戦略 / Postman API Night Okinawa 2026 Winter
tasshi
0
200
Featured
See All Featured
We Are The Robots
honzajavorek
0
160
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
14k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
210
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.3k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
How to Think Like a Performance Engineer
csswizardry
28
2.4k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.6k
What's in a price? How to price your products and services
michaelherold
247
13k
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