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
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
0
310
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
170
5分で問診!Composer セキュリティ健康診断
codmoninc
0
440
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
150
1年で人数1.5倍、PR数5.5倍増。 品質とアウトカムはどうなったか、 何が効いたか
ike002jp
0
140
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
2
580
Claude Team Plan導入・ガイド
tk3fftk
0
210
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
200
霧の中の代数的エフェクト
funnyycat
1
410
Apache Hive: Toward a Cloud Native Lakehouse
okumin
0
140
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
210
Featured
See All Featured
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
260
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
220
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Designing Powerful Visuals for Engaging Learning
tmiket
1
450
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Tell your own story through comics
letsgokoyo
1
1k
Accessibility Awareness
sabderemane
1
160
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