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
O que há de novo no Swift 2.0
Search
Francesco
June 30, 2015
Programming
53
0
Share
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
270
Testando o App do Nubank - CocoaHeads
fpg1503
2
280
Garantindo qualidade no app do Nubank
fpg1503
0
170
Testando o App do Nubank
fpg1503
1
130
Testes na Prática
fpg1503
0
93
What's good code and How do I write it?
fpg1503
0
170
Emojicode
fpg1503
0
250
A coisa mais sensacional que passou despercebida na WWDC
fpg1503
0
370
Optionals e o Gato de Schrödinger
fpg1503
0
180
Other Decks in Programming
See All in Programming
[RubyKaigi 2026] Require Hooks
palkan
1
220
Back to the roots of date
jinroq
0
340
GitHubCopilotCLIをはじめよう.pdf
htkym
0
230
Surviving Black Friday: 329 billion requests with Falcon!
ioquatix
0
750
Coding as Prompting Since 2025
ragingwind
0
840
Claude Code × Gemini × Ebitengine ゲーム制作素人WebエンジニアがGoでゲームを作った話
webzawa
0
150
(Re)make Regexp in Ruby: Democratizing internals for the JIT
makenowjust
3
580
Vibe NLP for Applied NLP
inesmontani
PRO
0
450
セグメントとターゲットを意識するプロポーザルの書き方 〜採択の鍵は、誰に刺すかを見極めるマーケティング戦略にある〜
m3m0r7
PRO
0
570
年間50登壇、単著出版、雑誌寄稿、Podcast出演、YouTube、CM、カンファレンス主催……全部やってみたので面白さ等を比較してみよう / I’ve tried them all, so let’s compare how interesting they are.
nrslib
4
800
VueエンジニアがReactを触って感じた_設計の違い
koukimiura
0
180
2026_04_15_量子計算をパズルとして解く
hideakitakechi
0
110
Featured
See All Featured
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
680
Site-Speed That Sticks
csswizardry
13
1.2k
Designing Experiences People Love
moore
143
24k
The Spectacular Lies of Maps
axbom
PRO
1
710
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.9k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
KATA
mclloyd
PRO
35
15k
The Invisible Side of Design
smashingmag
303
52k
Everyday Curiosity
cassininazir
0
200
Amusing Abliteration
ianozsvald
1
160
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