Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
O que há de novo no Swift 2.0
Search
Francesco
June 30, 2015
Programming
61
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
O que há de novo no Swift 2.0
Apresentação no CocoaHeads Campinas em Junho de 2015
Francesco
June 30, 2015
More Decks by Francesco
See All by Francesco
Testando o App do Nubank - TDC Florianópolis 2019
fpg1503
2
280
Testando o App do Nubank - CocoaHeads
fpg1503
2
290
Garantindo qualidade no app do Nubank
fpg1503
0
190
Testando o App do Nubank
fpg1503
1
150
Testes na Prática
fpg1503
0
110
What's good code and How do I write it?
fpg1503
0
190
Emojicode
fpg1503
0
260
A coisa mais sensacional que passou despercebida na WWDC
fpg1503
0
400
Optionals e o Gato de Schrödinger
fpg1503
0
190
Other Decks in Programming
See All in Programming
巨大モノリシックアプリ モダン化大作戦
ktcryomm
0
1k
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
480
iOSDC Japan 2026 - Swiftで作って学ぼう!データベース自作入門
kaseken
2
160
自分的「カンファレンスの楽しみ方」
syumai
0
200
Are APIs Still Relevant in the AI Era?
soyuka
0
230
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
330
How I Stole PSI from Android Studio - DroidKaigi2026
worker8
0
130
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
490
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
140
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
0
1.3k
AGENTS.md Is Not Enough:Build Skills, Don't Download Them
lx_t
0
120
[DroidKaigi 2026] Bring your own phones to Gradle Managed Devices
f2lk
0
120
Featured
See All Featured
Side Projects
sachag
456
43k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
840
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
500
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
540
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Why Our Code Smells
bkeepers
PRO
340
58k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.8k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
330
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
The SEO Collaboration Effect
kristinabergwall1
1
560
Transcript
What's new in Swift 2.0 by Francesco Perrotti-Garcia
Francesco Perrotti-Garcia iOS Developer @fpg1503 PlayKids - Movile
None
None
Swift 2.0
Open Source
What's new in Swfit Session 106 - 2015
Bacon
Analytics func myAnalyticsLogger<T>(value: T) { print(value) } Estado da Comida
enum FoodState { case Raw, Fried, Cooked(Cooker) }
Mas, o que é um Cooker?
Cooker enum Cooker : CookerType { case Oven, Microwave, Stove
} CookerType protocol CookerType { func cook(Food) }
Meu primeiro Cooker extension Cooker { func cook(food: Food) {
food.state = .Cooked(self) myAnalyticsLogger("Just cooked a \(food.state)\ \(food.name) using a \(self)") } }
Comida class Food { var state: FoodState var name: String
init(name: String, state: FoodState) { self.name = name self.state = state myAnalyticsLogger("Just created a \(state) \(name)") } }
Podemos criar Bacon!
Bacon class Bacon : Food { let tasty = true
} Meu bacon let myBacon = Bacon(name: "!", state: .Raw) //Just created a FoodState.Raw !
❤
Enums · Reflection · Carregam representação textual · Either<T1, T2>
funciona · Podem ser recursivos (no more Boxes) · indirect
Enums recursivos Futuramente enum Tree<T> { case Leaf(T) inidirect case
Node(Tree, Tree) } Pull Requests are welcome :)
Escopos arbitrários do { let myTemporaryMicrowave = Cooker.Microwave var myTemporaryBacon
= Bacon(name: "bacon", state: .Raw) myTemporaryMicrowave.cook(myTemporaryBacon) } //myTemporaryBacon não existe mais Consigo restringir mutabilidade
Outras mudanças Antes: do {} while Agora: repeat{} while ·
Options sets funcionam como tipos nativos!
Melhorias compilador · Funções e métodos · Novos warnings ·
var --> let · Ignorar resultado de método funcional
Melhorias para teste · Adição de @testable Documentação · Suporte
a Markdown
Cooker Melhorado Guard statements + pattern matching! extension Cooker {
func cook(food: Food) { guard case .Raw = food.state else { myAnalyticsLogger("Attempted to cook \(food.state)\ \(food.name) using \(self)") return } food.state = .Cooked(self) myAnalyticsLogger("Just cooked a \(food.state)\ \(food.name) using a \(self)") } }
Pattern matching everywhere · guard case · if case ·
for case Loops com filtro · for in... where filter
Melhorando Cooker Usando protocol extensions extension CookerType { func cook(food:
Food) { guard case .Raw = food.state else { myAnalyticsLogger("Attempted to cook \(food.state)\ \(food.name) using \(self)") return } food.state = .Cooked(self) myAnalyticsLogger("Just cooked a \(food.state)\ \(food.name) using a \(self)") } }
Usando o protocolo em FoodState enum FoodState { case Raw,
Fried, Cooked(CookerType) }
Criando um forno mais complexo struct Oven : CookerType {
var temperature : Float var heatOn : Bool func turnOn() { self.heatOn = true } func turnOff() { self.heatOn = false } }
Criando um forno mais complexo (que funciona) struct Oven :
CookerType { var temperature : Float var heatOn : Bool mutating func turnOn() { self.heatOn = true } mutating func turnOff() { self.heatOn = false } }
struct Oven : CookerType { ... mutating func cook(food: Food)
{ self.turnOn() guard case .Raw = food.state else { myAnalyticsLogger("Attempted to cook \(food.state)\ \(food.name) using \(self)") return } food.state = .Cooked(self) myAnalyticsLogger("Just cooked a \(food.state) \(food.name) using a\ \(self) at \(temperature) degrees") self.turnOff() } }
Defer ou como não colocar fogo na casa struct Oven
: CookerType { ... mutating func cook(food: Food) { self.turnOn() defer { self.turnOff() } guard case .Raw = food.state else { myAnalyticsLogger("Attempted to cook \(food.state)\ \(food.name) using \(self)") return } food.state = .Cooked(self) myAnalyticsLogger("Just cooked a \(food.state) \(food.name) using a\ \(self) at \(temperature) degrees") } }
Availability Antes respondsToSelector · descobrir selector (Objective-C) · não seguro
· pode dar falso positivo
Availability Agora · compilador checa · estático · lindo #available(iOS
9.0, *)
Protocol Extensions · extremamente poderoso · funcional mais natural ·
protocol-oriented programming
Protocol Oriented Programming in Swift Session 408 - 2015
Error handling · Erros triviais --> Optionals · Erros irrecuperáveis
--> throw · Erros não devem ser ignorados · Chega de error:nil
Error handling · try · do {} catch · try!
· NSError conforms com ErrorType · leves
Obrigado Dúvidas? github.com/fpg1503/Presentations