SlideShare a Scribd company logo
Swift Thinking
@NatashaTheRobot
Back to December
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
}
return 0;
}
println("Hello, World!")
Swift Thinking
Swift Thinking
Swift Thinking
Swift Thinking
—Optionals?!
—Value Types
—Higher-order functions
Optionals?!
"~40% of bugs shipped to
customers in the last
three years would have
been caught immediately
by using Swift" - Sunset
Lake Software
Swift Thinking
enum Optional<T> {
case Some(T)
case None
}
let tSwiftAlbums = [
2014 : "1989",
2012: "Red",
2010: "Speak Now",
2008: "Fearless",
2006: "Taylor Swift"]
let possibleAlbumFrom2011: String? = tSwiftAlbums[2011]
let possibleAlbumFrom2014: String? = tSwiftAlbums[2014]
Swift Thinking
let tSwiftAlbums = [
2014 : "1989",
2012: "Red",
2010: "Speak Now",
2008: "Fearless",
2006: "Taylor Swift"]
let possibleAlbumFrom2014: String? = tSwiftAlbums[2014]
if possibleAlbumFrom2014 == .None {
println("Taylor Swift had no albums in 2014")
} else {
let albumFrom2014 = possibleAlbumFrom2014!
println("Taylor Swift's 2014 album was (albumFrom2014)")
}
let tSwiftAlbums = [
2014 : "1989",
2012: "Red",
2010: "Speak Now",
2008: "Fearless",
2006: "Taylor Swift"]
if let albumFor2014 = tSwiftAlbums[2014] {
println("Taylor Swift's 2014 album was (albumFor2014)")
} else {
println("Taylor Swift had no albums in 2014")
}
Swift Thinking
Value Types
—structs
—enums
—(tuples)
class Album {
let title: String
let artist: String
var copiesSold: Int
init(title: String, artist: String, copiesSold: Int) {
self.title = title
self.artist = artist
self.copiesSold = copiesSold
}
}
let tSwift1989 = Album(title: "1989",
artist: "Taylor Swift",
copiesSold: 4505000)
func another1000Sales(forAlbum album: Album) {
album.copiesSold += 1000
}
another1000Sales(forAlbum: tSwift1989)
tSwift1989.copiesSold // 4,506,000
struct Album {
let title: String
let artist: String
var copiesSold: Int
}
let tSwift1989 = Album(title: "1989",
artist: "Taylor Swift",
copiesSold: 4505000)
func another1000Sales(var forAlbum album: Album) {
album.copiesSold += 1000
album.copiesSold // 4,506,000
}
another1000Sales(forAlbum: tSwift1989)
tSwift1989.copiesSold // 4,505,000
Use a value type when:
—Comparing instance data with == makes sense
—You want copies to have independent state
—The data will be used in code across multiple
threads
Swift Blog: Value and Reference Types
Use a reference type (e.g. use a class) when:
—Comparing instance identity with == makes sense
—You want to create shared, mutable state
Swift Blog: Value and Reference Types
"Almost all types in Swift are value
types, including arrays,
dictionaries, numbers, booleans,
tuples, and enums. Classes are the
exception rather than the rule." -
Functional Swift Book
$ grep -e "^struct " swift.md | wc -l
81
$ grep -e "^enum " swift.md | wc -l
8
$ grep -e "^class " swift.md | wc -l
3
Higher-order Functions
a higher-order function is a function that does at
least one of the following:
—takes one or more functions as an input
—outputs a function
- Wikipedia
Array
—map
—reduce
—filter
—flatMap
struct Song {
let title: String
let album: String
}
let tSwiftSongs = [
Song(title: "Blank Space", album: "1989"),
Song(title: "All You Had to Do Was Stay", album: "Red"),
Song(title: "Back to December", album: "Speak Now"),
Song(title: "All You Had to Do Was Stay", album: "1989"),
Song(title: "Begin Again", album: "Red"),
Song(title: "Clean", album: "1989"),
Song(title: "Love Story", album: "Fearless"),
Song(title: "Shake It Off", album: "1989"),
Song(title: "Bad Blood", album: "1989")
]
struct tSwift1989Album {
let title = "1989"
var songs = [Song]()
}
class tSwift1989Album {
let title = "1989"
var songs = [Song]()
func add1989Songs() {
for song in tSwiftSongs {
if song.album == "1989" {
songs.append(song)
}
}
}
}
let album = tSwift1989Album()
album.add1989Songs()
album.songs.count // 5
let album = tSwift1989Album()
album.add1989Songs()
album.songs.count // 5
// MUCH FURTHER DOWN
album.add1989Songs()
let album = tSwift1989Album()
album.add1989Songs()
album.songs.count // 5
// MUCH FURTHER DOWN
album.add1989Songs()
album.songs.count // 10
let album = tSwift1989Album()
album.add1989Songs()
album.songs.count // 5
album.add1989Songs()
album.songs.count // 10
album.add1989Songs()
album.songs.count // 15
album.add1989Songs()
album.songs.count // 20
/// Return an `Array` containing the elements `x` of `self` for which
/// `includeElement(x)` is `true`
func filter(includeElement: (T) -> Bool) -> [T]
class tSwift1989Album {
let title = "1989"
var songs = [Song]()
func add1989SongsWithFilter() {
songs = tSwiftSongs.filter({ song in song.album == "1989"})
}
}
songs = tSwiftSongs.filter({ song in song.album == "1989"})
songs = tSwiftSongs.filter({ song in song.album == "1989"})
songs = tSwiftSongs.filter({ $0.album == "1989"})
songs = tSwiftSongs.filter({ song in song.album == "1989"})
songs = tSwiftSongs.filter({ $0.album == "1989"})
songs = tSwiftSongs.filter { $0.album == "1989"}
let album = tSwift1989Album()
album.add1989SongsWithFilter()
album.songs.count // 5
album.add1989SongsWithFilter()
album.songs.count // 5
album.add1989SongsWithFilter()
album.songs.count // 5
album.add1989SongsWithFilter()
album.songs.count // 5
album.add1989SongsWithFilter()
album.songs.count // 5
Swift Thinking
Swift Thinking
—Optionals?!
—Value Types
—Higher-order functions
Questions?!
@NatashaTheRobot
Ad

More Related Content

Viewers also liked (18)

Social media strategies slideshare version
Social media strategies slideshare versionSocial media strategies slideshare version
Social media strategies slideshare version
Kella Price
 
Proyecto final jonathan lara reyes
Proyecto final jonathan lara reyesProyecto final jonathan lara reyes
Proyecto final jonathan lara reyes
JONLR
 
Three Things...
Three Things...Three Things...
Three Things...
OH TEIK BIN
 
BAAL-SIG-LLT-2016-Programme-Booklet_FINAL
BAAL-SIG-LLT-2016-Programme-Booklet_FINALBAAL-SIG-LLT-2016-Programme-Booklet_FINAL
BAAL-SIG-LLT-2016-Programme-Booklet_FINAL
Helen Lee
 
Control panel
Control panelControl panel
Control panel
Blackboard Swansea
 
State of open research data open con
State of open research data   open conState of open research data   open con
State of open research data open con
Amye Kenall
 
ابي لا تكن سبب هلاكي
ابي لا تكن سبب هلاكيابي لا تكن سبب هلاكي
ابي لا تكن سبب هلاكي
abuomar75
 
Qué tipo de compuesto es el agua
Qué tipo de compuesto es el aguaQué tipo de compuesto es el agua
Qué tipo de compuesto es el agua
jose hugo ruvalcaba vadillo
 
Технологии виртуальной и дополненной реальности в маркетинге и рекламе
 Технологии виртуальной и дополненной реальности в маркетинге и рекламе Технологии виртуальной и дополненной реальности в маркетинге и рекламе
Технологии виртуальной и дополненной реальности в маркетинге и рекламе
The International Association of Marketing Initiatives (IAMI)
 
Welding process
Welding processWelding process
Welding process
Darawan Wahid
 
Workshop #14: Behaviour, government policy and me: applying behavioural insig...
Workshop #14: Behaviour, government policy and me: applying behavioural insig...Workshop #14: Behaviour, government policy and me: applying behavioural insig...
Workshop #14: Behaviour, government policy and me: applying behavioural insig...
ux singapore
 
Multi-Omics Bioinformatics across Application Domains
Multi-Omics Bioinformatics across Application DomainsMulti-Omics Bioinformatics across Application Domains
Multi-Omics Bioinformatics across Application Domains
Christoph Steinbeck
 
Selling Account-Based Marketing (ABM) Internally To Your Organization
Selling Account-Based Marketing (ABM) Internally To Your OrganizationSelling Account-Based Marketing (ABM) Internally To Your Organization
Selling Account-Based Marketing (ABM) Internally To Your Organization
Heinz Marketing Inc
 
How to Get Into Big Data: Women in Tech Philly
How to Get Into Big Data: Women in Tech PhillyHow to Get Into Big Data: Women in Tech Philly
How to Get Into Big Data: Women in Tech Philly
Vicki Boykis
 
What Is Value Added For Security Guard Company Clients?
What Is Value Added For Security Guard Company Clients?What Is Value Added For Security Guard Company Clients?
What Is Value Added For Security Guard Company Clients?
OfficerReports.com
 
100+ Best Quotes from Cannes Lions 2016
100+ Best Quotes from Cannes Lions 2016100+ Best Quotes from Cannes Lions 2016
100+ Best Quotes from Cannes Lions 2016
Michael Boamah
 
LinkedIn Ads Playbook
LinkedIn Ads PlaybookLinkedIn Ads Playbook
LinkedIn Ads Playbook
Francesca Lazzini
 
Cibeles Madrid Fashion Week 2009
Cibeles Madrid Fashion Week 2009Cibeles Madrid Fashion Week 2009
Cibeles Madrid Fashion Week 2009
Compulsiva Accesorios
 
Social media strategies slideshare version
Social media strategies slideshare versionSocial media strategies slideshare version
Social media strategies slideshare version
Kella Price
 
Proyecto final jonathan lara reyes
Proyecto final jonathan lara reyesProyecto final jonathan lara reyes
Proyecto final jonathan lara reyes
JONLR
 
BAAL-SIG-LLT-2016-Programme-Booklet_FINAL
BAAL-SIG-LLT-2016-Programme-Booklet_FINALBAAL-SIG-LLT-2016-Programme-Booklet_FINAL
BAAL-SIG-LLT-2016-Programme-Booklet_FINAL
Helen Lee
 
State of open research data open con
State of open research data   open conState of open research data   open con
State of open research data open con
Amye Kenall
 
ابي لا تكن سبب هلاكي
ابي لا تكن سبب هلاكيابي لا تكن سبب هلاكي
ابي لا تكن سبب هلاكي
abuomar75
 
Технологии виртуальной и дополненной реальности в маркетинге и рекламе
 Технологии виртуальной и дополненной реальности в маркетинге и рекламе Технологии виртуальной и дополненной реальности в маркетинге и рекламе
Технологии виртуальной и дополненной реальности в маркетинге и рекламе
The International Association of Marketing Initiatives (IAMI)
 
Workshop #14: Behaviour, government policy and me: applying behavioural insig...
Workshop #14: Behaviour, government policy and me: applying behavioural insig...Workshop #14: Behaviour, government policy and me: applying behavioural insig...
Workshop #14: Behaviour, government policy and me: applying behavioural insig...
ux singapore
 
Multi-Omics Bioinformatics across Application Domains
Multi-Omics Bioinformatics across Application DomainsMulti-Omics Bioinformatics across Application Domains
Multi-Omics Bioinformatics across Application Domains
Christoph Steinbeck
 
Selling Account-Based Marketing (ABM) Internally To Your Organization
Selling Account-Based Marketing (ABM) Internally To Your OrganizationSelling Account-Based Marketing (ABM) Internally To Your Organization
Selling Account-Based Marketing (ABM) Internally To Your Organization
Heinz Marketing Inc
 
How to Get Into Big Data: Women in Tech Philly
How to Get Into Big Data: Women in Tech PhillyHow to Get Into Big Data: Women in Tech Philly
How to Get Into Big Data: Women in Tech Philly
Vicki Boykis
 
What Is Value Added For Security Guard Company Clients?
What Is Value Added For Security Guard Company Clients?What Is Value Added For Security Guard Company Clients?
What Is Value Added For Security Guard Company Clients?
OfficerReports.com
 
100+ Best Quotes from Cannes Lions 2016
100+ Best Quotes from Cannes Lions 2016100+ Best Quotes from Cannes Lions 2016
100+ Best Quotes from Cannes Lions 2016
Michael Boamah
 

Similar to Swift Thinking (11)

Many of us have large digital music collections that are not always .pdf
Many of us have large digital music collections that are not always .pdfMany of us have large digital music collections that are not always .pdf
Many of us have large digital music collections that are not always .pdf
fazanmobiles
 
Intro toswift1
Intro toswift1Intro toswift1
Intro toswift1
Jordan Morgan
 
Introduction to regular expressions
Introduction to regular expressionsIntroduction to regular expressions
Introduction to regular expressions
Ben Brumfield
 
What Are For Expressions in Scala?
What Are For Expressions in Scala?What Are For Expressions in Scala?
What Are For Expressions in Scala?
BoldRadius Solutions
 
Can someone please help me implement the addSong function .pdf
Can someone please help me implement the addSong function .pdfCan someone please help me implement the addSong function .pdf
Can someone please help me implement the addSong function .pdf
akshpatil4
 
I need help writing the methods for the song and playList class in J.pdf
I need help writing the methods for the song and playList class in J.pdfI need help writing the methods for the song and playList class in J.pdf
I need help writing the methods for the song and playList class in J.pdf
arihanthtextiles
 
Textpad and Regular Expressions
Textpad and Regular ExpressionsTextpad and Regular Expressions
Textpad and Regular Expressions
OCSI
 
Fun never stops. introduction to haskell programming language
Fun never stops. introduction to haskell programming languageFun never stops. introduction to haskell programming language
Fun never stops. introduction to haskell programming language
Pawel Szulc
 
Programming in Vinyl (BayHac 2014)
Programming in Vinyl (BayHac 2014)Programming in Vinyl (BayHac 2014)
Programming in Vinyl (BayHac 2014)
jonsterling
 
Bioinformatica p2-p3-introduction
Bioinformatica p2-p3-introductionBioinformatica p2-p3-introduction
Bioinformatica p2-p3-introduction
Prof. Wim Van Criekinge
 
Snakes and ladders
Snakes and laddersSnakes and ladders
Snakes and ladders
Rubén Berenguel
 
Many of us have large digital music collections that are not always .pdf
Many of us have large digital music collections that are not always .pdfMany of us have large digital music collections that are not always .pdf
Many of us have large digital music collections that are not always .pdf
fazanmobiles
 
Introduction to regular expressions
Introduction to regular expressionsIntroduction to regular expressions
Introduction to regular expressions
Ben Brumfield
 
What Are For Expressions in Scala?
What Are For Expressions in Scala?What Are For Expressions in Scala?
What Are For Expressions in Scala?
BoldRadius Solutions
 
Can someone please help me implement the addSong function .pdf
Can someone please help me implement the addSong function .pdfCan someone please help me implement the addSong function .pdf
Can someone please help me implement the addSong function .pdf
akshpatil4
 
I need help writing the methods for the song and playList class in J.pdf
I need help writing the methods for the song and playList class in J.pdfI need help writing the methods for the song and playList class in J.pdf
I need help writing the methods for the song and playList class in J.pdf
arihanthtextiles
 
Textpad and Regular Expressions
Textpad and Regular ExpressionsTextpad and Regular Expressions
Textpad and Regular Expressions
OCSI
 
Fun never stops. introduction to haskell programming language
Fun never stops. introduction to haskell programming languageFun never stops. introduction to haskell programming language
Fun never stops. introduction to haskell programming language
Pawel Szulc
 
Programming in Vinyl (BayHac 2014)
Programming in Vinyl (BayHac 2014)Programming in Vinyl (BayHac 2014)
Programming in Vinyl (BayHac 2014)
jonsterling
 
Ad

More from Natasha Murashev (20)

Digital Nomad: The New Normal
Digital Nomad: The New NormalDigital Nomad: The New Normal
Digital Nomad: The New Normal
Natasha Murashev
 
Swift Delhi: Practical POP
Swift Delhi: Practical POPSwift Delhi: Practical POP
Swift Delhi: Practical POP
Natasha Murashev
 
Build Features Not Apps
Build Features Not AppsBuild Features Not Apps
Build Features Not Apps
Natasha Murashev
 
Build Features Not Apps
Build Features Not AppsBuild Features Not Apps
Build Features Not Apps
Natasha Murashev
 
Practical Protocols with Associated Types
Practical Protocols with Associated TypesPractical Protocols with Associated Types
Practical Protocols with Associated Types
Natasha Murashev
 
The Secret Life of a Digital Nomad
The Secret Life of a Digital NomadThe Secret Life of a Digital Nomad
The Secret Life of a Digital Nomad
Natasha Murashev
 
How to Win on the Apple Watch
How to Win on the Apple WatchHow to Win on the Apple Watch
How to Win on the Apple Watch
Natasha Murashev
 
Hello watchOS2
Hello watchOS2 Hello watchOS2
Hello watchOS2
Natasha Murashev
 
Practical Protocol-Oriented-Programming
Practical Protocol-Oriented-ProgrammingPractical Protocol-Oriented-Programming
Practical Protocol-Oriented-Programming
Natasha Murashev
 
Protocol Oriented MVVM - Auckland iOS Meetup
Protocol Oriented MVVM - Auckland iOS MeetupProtocol Oriented MVVM - Auckland iOS Meetup
Protocol Oriented MVVM - Auckland iOS Meetup
Natasha Murashev
 
Protocol-Oriented MVVM (extended edition)
Protocol-Oriented MVVM (extended edition)Protocol-Oriented MVVM (extended edition)
Protocol-Oriented MVVM (extended edition)
Natasha Murashev
 
Protocol-Oriented MVVM
Protocol-Oriented MVVMProtocol-Oriented MVVM
Protocol-Oriented MVVM
Natasha Murashev
 
The Swift Architect
The Swift ArchitectThe Swift Architect
The Swift Architect
Natasha Murashev
 
The Zen Guide to WatchOS 2
The Zen Guide to WatchOS 2The Zen Guide to WatchOS 2
The Zen Guide to WatchOS 2
Natasha Murashev
 
HealthKit Deep Dive
HealthKit Deep DiveHealthKit Deep Dive
HealthKit Deep Dive
Natasha Murashev
 
Using Parse in Hackathons
Using Parse in HackathonsUsing Parse in Hackathons
Using Parse in Hackathons
Natasha Murashev
 
Hello, WatchKit
Hello, WatchKitHello, WatchKit
Hello, WatchKit
Natasha Murashev
 
Hello, WatchKit
Hello, WatchKitHello, WatchKit
Hello, WatchKit
Natasha Murashev
 
Unleash the Power of Playgrounds
Unleash the Power of PlaygroundsUnleash the Power of Playgrounds
Unleash the Power of Playgrounds
Natasha Murashev
 
Hello, WatchKit
Hello, WatchKitHello, WatchKit
Hello, WatchKit
Natasha Murashev
 
Digital Nomad: The New Normal
Digital Nomad: The New NormalDigital Nomad: The New Normal
Digital Nomad: The New Normal
Natasha Murashev
 
Swift Delhi: Practical POP
Swift Delhi: Practical POPSwift Delhi: Practical POP
Swift Delhi: Practical POP
Natasha Murashev
 
Practical Protocols with Associated Types
Practical Protocols with Associated TypesPractical Protocols with Associated Types
Practical Protocols with Associated Types
Natasha Murashev
 
The Secret Life of a Digital Nomad
The Secret Life of a Digital NomadThe Secret Life of a Digital Nomad
The Secret Life of a Digital Nomad
Natasha Murashev
 
How to Win on the Apple Watch
How to Win on the Apple WatchHow to Win on the Apple Watch
How to Win on the Apple Watch
Natasha Murashev
 
Practical Protocol-Oriented-Programming
Practical Protocol-Oriented-ProgrammingPractical Protocol-Oriented-Programming
Practical Protocol-Oriented-Programming
Natasha Murashev
 
Protocol Oriented MVVM - Auckland iOS Meetup
Protocol Oriented MVVM - Auckland iOS MeetupProtocol Oriented MVVM - Auckland iOS Meetup
Protocol Oriented MVVM - Auckland iOS Meetup
Natasha Murashev
 
Protocol-Oriented MVVM (extended edition)
Protocol-Oriented MVVM (extended edition)Protocol-Oriented MVVM (extended edition)
Protocol-Oriented MVVM (extended edition)
Natasha Murashev
 
The Zen Guide to WatchOS 2
The Zen Guide to WatchOS 2The Zen Guide to WatchOS 2
The Zen Guide to WatchOS 2
Natasha Murashev
 
Unleash the Power of Playgrounds
Unleash the Power of PlaygroundsUnleash the Power of Playgrounds
Unleash the Power of Playgrounds
Natasha Murashev
 
Ad

Recently uploaded (20)

How to Batch Export Lotus Notes NSF Emails to Outlook PST Easily?
How to Batch Export Lotus Notes NSF Emails to Outlook PST Easily?How to Batch Export Lotus Notes NSF Emails to Outlook PST Easily?
How to Batch Export Lotus Notes NSF Emails to Outlook PST Easily?
steaveroggers
 
Adobe Master Collection CC Crack Advance Version 2025
Adobe Master Collection CC Crack Advance Version 2025Adobe Master Collection CC Crack Advance Version 2025
Adobe Master Collection CC Crack Advance Version 2025
kashifyounis067
 
Expand your AI adoption with AgentExchange
Expand your AI adoption with AgentExchangeExpand your AI adoption with AgentExchange
Expand your AI adoption with AgentExchange
Fexle Services Pvt. Ltd.
 
EASEUS Partition Master Crack + License Code
EASEUS Partition Master Crack + License CodeEASEUS Partition Master Crack + License Code
EASEUS Partition Master Crack + License Code
aneelaramzan63
 
Kubernetes_101_Zero_to_Platform_Engineer.pptx
Kubernetes_101_Zero_to_Platform_Engineer.pptxKubernetes_101_Zero_to_Platform_Engineer.pptx
Kubernetes_101_Zero_to_Platform_Engineer.pptx
CloudScouts
 
Secure Test Infrastructure: The Backbone of Trustworthy Software Development
Secure Test Infrastructure: The Backbone of Trustworthy Software DevelopmentSecure Test Infrastructure: The Backbone of Trustworthy Software Development
Secure Test Infrastructure: The Backbone of Trustworthy Software Development
Shubham Joshi
 
Adobe After Effects Crack FREE FRESH version 2025
Adobe After Effects Crack FREE FRESH version 2025Adobe After Effects Crack FREE FRESH version 2025
Adobe After Effects Crack FREE FRESH version 2025
kashifyounis067
 
Salesforce Data Cloud- Hyperscale data platform, built for Salesforce.
Salesforce Data Cloud- Hyperscale data platform, built for Salesforce.Salesforce Data Cloud- Hyperscale data platform, built for Salesforce.
Salesforce Data Cloud- Hyperscale data platform, built for Salesforce.
Dele Amefo
 
Who Watches the Watchmen (SciFiDevCon 2025)
Who Watches the Watchmen (SciFiDevCon 2025)Who Watches the Watchmen (SciFiDevCon 2025)
Who Watches the Watchmen (SciFiDevCon 2025)
Allon Mureinik
 
F-Secure Freedome VPN 2025 Crack Plus Activation New Version
F-Secure Freedome VPN 2025 Crack Plus Activation  New VersionF-Secure Freedome VPN 2025 Crack Plus Activation  New Version
F-Secure Freedome VPN 2025 Crack Plus Activation New Version
saimabibi60507
 
What Do Contribution Guidelines Say About Software Testing? (MSR 2025)
What Do Contribution Guidelines Say About Software Testing? (MSR 2025)What Do Contribution Guidelines Say About Software Testing? (MSR 2025)
What Do Contribution Guidelines Say About Software Testing? (MSR 2025)
Andre Hora
 
Pixologic ZBrush Crack Plus Activation Key [Latest 2025] New Version
Pixologic ZBrush Crack Plus Activation Key [Latest 2025] New VersionPixologic ZBrush Crack Plus Activation Key [Latest 2025] New Version
Pixologic ZBrush Crack Plus Activation Key [Latest 2025] New Version
saimabibi60507
 
Exploring Wayland: A Modern Display Server for the Future
Exploring Wayland: A Modern Display Server for the FutureExploring Wayland: A Modern Display Server for the Future
Exploring Wayland: A Modern Display Server for the Future
ICS
 
Download YouTube By Click 2025 Free Full Activated
Download YouTube By Click 2025 Free Full ActivatedDownload YouTube By Click 2025 Free Full Activated
Download YouTube By Click 2025 Free Full Activated
saniamalik72555
 
Landscape of Requirements Engineering for/by AI through Literature Review
Landscape of Requirements Engineering for/by AI through Literature ReviewLandscape of Requirements Engineering for/by AI through Literature Review
Landscape of Requirements Engineering for/by AI through Literature Review
Hironori Washizaki
 
WinRAR Crack for Windows (100% Working 2025)
WinRAR Crack for Windows (100% Working 2025)WinRAR Crack for Windows (100% Working 2025)
WinRAR Crack for Windows (100% Working 2025)
sh607827
 
Revolutionizing Residential Wi-Fi PPT.pptx
Revolutionizing Residential Wi-Fi PPT.pptxRevolutionizing Residential Wi-Fi PPT.pptx
Revolutionizing Residential Wi-Fi PPT.pptx
nidhisingh691197
 
Exploring Code Comprehension in Scientific Programming: Preliminary Insight...
Exploring Code Comprehension  in Scientific Programming:  Preliminary Insight...Exploring Code Comprehension  in Scientific Programming:  Preliminary Insight...
Exploring Code Comprehension in Scientific Programming: Preliminary Insight...
University of Hawai‘i at Mānoa
 
LEARN SEO AND INCREASE YOUR KNOWLDGE IN SOFTWARE INDUSTRY
LEARN SEO AND INCREASE YOUR KNOWLDGE IN SOFTWARE INDUSTRYLEARN SEO AND INCREASE YOUR KNOWLDGE IN SOFTWARE INDUSTRY
LEARN SEO AND INCREASE YOUR KNOWLDGE IN SOFTWARE INDUSTRY
NidaFarooq10
 
Maxon CINEMA 4D 2025 Crack FREE Download LINK
Maxon CINEMA 4D 2025 Crack FREE Download LINKMaxon CINEMA 4D 2025 Crack FREE Download LINK
Maxon CINEMA 4D 2025 Crack FREE Download LINK
younisnoman75
 
How to Batch Export Lotus Notes NSF Emails to Outlook PST Easily?
How to Batch Export Lotus Notes NSF Emails to Outlook PST Easily?How to Batch Export Lotus Notes NSF Emails to Outlook PST Easily?
How to Batch Export Lotus Notes NSF Emails to Outlook PST Easily?
steaveroggers
 
Adobe Master Collection CC Crack Advance Version 2025
Adobe Master Collection CC Crack Advance Version 2025Adobe Master Collection CC Crack Advance Version 2025
Adobe Master Collection CC Crack Advance Version 2025
kashifyounis067
 
Expand your AI adoption with AgentExchange
Expand your AI adoption with AgentExchangeExpand your AI adoption with AgentExchange
Expand your AI adoption with AgentExchange
Fexle Services Pvt. Ltd.
 
EASEUS Partition Master Crack + License Code
EASEUS Partition Master Crack + License CodeEASEUS Partition Master Crack + License Code
EASEUS Partition Master Crack + License Code
aneelaramzan63
 
Kubernetes_101_Zero_to_Platform_Engineer.pptx
Kubernetes_101_Zero_to_Platform_Engineer.pptxKubernetes_101_Zero_to_Platform_Engineer.pptx
Kubernetes_101_Zero_to_Platform_Engineer.pptx
CloudScouts
 
Secure Test Infrastructure: The Backbone of Trustworthy Software Development
Secure Test Infrastructure: The Backbone of Trustworthy Software DevelopmentSecure Test Infrastructure: The Backbone of Trustworthy Software Development
Secure Test Infrastructure: The Backbone of Trustworthy Software Development
Shubham Joshi
 
Adobe After Effects Crack FREE FRESH version 2025
Adobe After Effects Crack FREE FRESH version 2025Adobe After Effects Crack FREE FRESH version 2025
Adobe After Effects Crack FREE FRESH version 2025
kashifyounis067
 
Salesforce Data Cloud- Hyperscale data platform, built for Salesforce.
Salesforce Data Cloud- Hyperscale data platform, built for Salesforce.Salesforce Data Cloud- Hyperscale data platform, built for Salesforce.
Salesforce Data Cloud- Hyperscale data platform, built for Salesforce.
Dele Amefo
 
Who Watches the Watchmen (SciFiDevCon 2025)
Who Watches the Watchmen (SciFiDevCon 2025)Who Watches the Watchmen (SciFiDevCon 2025)
Who Watches the Watchmen (SciFiDevCon 2025)
Allon Mureinik
 
F-Secure Freedome VPN 2025 Crack Plus Activation New Version
F-Secure Freedome VPN 2025 Crack Plus Activation  New VersionF-Secure Freedome VPN 2025 Crack Plus Activation  New Version
F-Secure Freedome VPN 2025 Crack Plus Activation New Version
saimabibi60507
 
What Do Contribution Guidelines Say About Software Testing? (MSR 2025)
What Do Contribution Guidelines Say About Software Testing? (MSR 2025)What Do Contribution Guidelines Say About Software Testing? (MSR 2025)
What Do Contribution Guidelines Say About Software Testing? (MSR 2025)
Andre Hora
 
Pixologic ZBrush Crack Plus Activation Key [Latest 2025] New Version
Pixologic ZBrush Crack Plus Activation Key [Latest 2025] New VersionPixologic ZBrush Crack Plus Activation Key [Latest 2025] New Version
Pixologic ZBrush Crack Plus Activation Key [Latest 2025] New Version
saimabibi60507
 
Exploring Wayland: A Modern Display Server for the Future
Exploring Wayland: A Modern Display Server for the FutureExploring Wayland: A Modern Display Server for the Future
Exploring Wayland: A Modern Display Server for the Future
ICS
 
Download YouTube By Click 2025 Free Full Activated
Download YouTube By Click 2025 Free Full ActivatedDownload YouTube By Click 2025 Free Full Activated
Download YouTube By Click 2025 Free Full Activated
saniamalik72555
 
Landscape of Requirements Engineering for/by AI through Literature Review
Landscape of Requirements Engineering for/by AI through Literature ReviewLandscape of Requirements Engineering for/by AI through Literature Review
Landscape of Requirements Engineering for/by AI through Literature Review
Hironori Washizaki
 
WinRAR Crack for Windows (100% Working 2025)
WinRAR Crack for Windows (100% Working 2025)WinRAR Crack for Windows (100% Working 2025)
WinRAR Crack for Windows (100% Working 2025)
sh607827
 
Revolutionizing Residential Wi-Fi PPT.pptx
Revolutionizing Residential Wi-Fi PPT.pptxRevolutionizing Residential Wi-Fi PPT.pptx
Revolutionizing Residential Wi-Fi PPT.pptx
nidhisingh691197
 
Exploring Code Comprehension in Scientific Programming: Preliminary Insight...
Exploring Code Comprehension  in Scientific Programming:  Preliminary Insight...Exploring Code Comprehension  in Scientific Programming:  Preliminary Insight...
Exploring Code Comprehension in Scientific Programming: Preliminary Insight...
University of Hawai‘i at Mānoa
 
LEARN SEO AND INCREASE YOUR KNOWLDGE IN SOFTWARE INDUSTRY
LEARN SEO AND INCREASE YOUR KNOWLDGE IN SOFTWARE INDUSTRYLEARN SEO AND INCREASE YOUR KNOWLDGE IN SOFTWARE INDUSTRY
LEARN SEO AND INCREASE YOUR KNOWLDGE IN SOFTWARE INDUSTRY
NidaFarooq10
 
Maxon CINEMA 4D 2025 Crack FREE Download LINK
Maxon CINEMA 4D 2025 Crack FREE Download LINKMaxon CINEMA 4D 2025 Crack FREE Download LINK
Maxon CINEMA 4D 2025 Crack FREE Download LINK
younisnoman75
 

Swift Thinking

  • 2. Back to December #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... NSLog(@"Hello, World!"); } return 0; }
  • 10. "~40% of bugs shipped to customers in the last three years would have been caught immediately by using Swift" - Sunset Lake Software
  • 12. enum Optional<T> { case Some(T) case None }
  • 13. let tSwiftAlbums = [ 2014 : "1989", 2012: "Red", 2010: "Speak Now", 2008: "Fearless", 2006: "Taylor Swift"] let possibleAlbumFrom2011: String? = tSwiftAlbums[2011] let possibleAlbumFrom2014: String? = tSwiftAlbums[2014]
  • 15. let tSwiftAlbums = [ 2014 : "1989", 2012: "Red", 2010: "Speak Now", 2008: "Fearless", 2006: "Taylor Swift"] let possibleAlbumFrom2014: String? = tSwiftAlbums[2014] if possibleAlbumFrom2014 == .None { println("Taylor Swift had no albums in 2014") } else { let albumFrom2014 = possibleAlbumFrom2014! println("Taylor Swift's 2014 album was (albumFrom2014)") }
  • 16. let tSwiftAlbums = [ 2014 : "1989", 2012: "Red", 2010: "Speak Now", 2008: "Fearless", 2006: "Taylor Swift"] if let albumFor2014 = tSwiftAlbums[2014] { println("Taylor Swift's 2014 album was (albumFor2014)") } else { println("Taylor Swift had no albums in 2014") }
  • 20. class Album { let title: String let artist: String var copiesSold: Int init(title: String, artist: String, copiesSold: Int) { self.title = title self.artist = artist self.copiesSold = copiesSold } }
  • 21. let tSwift1989 = Album(title: "1989", artist: "Taylor Swift", copiesSold: 4505000) func another1000Sales(forAlbum album: Album) { album.copiesSold += 1000 } another1000Sales(forAlbum: tSwift1989) tSwift1989.copiesSold // 4,506,000
  • 22. struct Album { let title: String let artist: String var copiesSold: Int }
  • 23. let tSwift1989 = Album(title: "1989", artist: "Taylor Swift", copiesSold: 4505000) func another1000Sales(var forAlbum album: Album) { album.copiesSold += 1000 album.copiesSold // 4,506,000 } another1000Sales(forAlbum: tSwift1989) tSwift1989.copiesSold // 4,505,000
  • 24. Use a value type when: —Comparing instance data with == makes sense —You want copies to have independent state —The data will be used in code across multiple threads Swift Blog: Value and Reference Types
  • 25. Use a reference type (e.g. use a class) when: —Comparing instance identity with == makes sense —You want to create shared, mutable state Swift Blog: Value and Reference Types
  • 26. "Almost all types in Swift are value types, including arrays, dictionaries, numbers, booleans, tuples, and enums. Classes are the exception rather than the rule." - Functional Swift Book
  • 27. $ grep -e "^struct " swift.md | wc -l 81 $ grep -e "^enum " swift.md | wc -l 8 $ grep -e "^class " swift.md | wc -l 3
  • 29. a higher-order function is a function that does at least one of the following: —takes one or more functions as an input —outputs a function - Wikipedia
  • 31. struct Song { let title: String let album: String } let tSwiftSongs = [ Song(title: "Blank Space", album: "1989"), Song(title: "All You Had to Do Was Stay", album: "Red"), Song(title: "Back to December", album: "Speak Now"), Song(title: "All You Had to Do Was Stay", album: "1989"), Song(title: "Begin Again", album: "Red"), Song(title: "Clean", album: "1989"), Song(title: "Love Story", album: "Fearless"), Song(title: "Shake It Off", album: "1989"), Song(title: "Bad Blood", album: "1989") ]
  • 32. struct tSwift1989Album { let title = "1989" var songs = [Song]() }
  • 33. class tSwift1989Album { let title = "1989" var songs = [Song]() func add1989Songs() { for song in tSwiftSongs { if song.album == "1989" { songs.append(song) } } } }
  • 34. let album = tSwift1989Album() album.add1989Songs() album.songs.count // 5
  • 35. let album = tSwift1989Album() album.add1989Songs() album.songs.count // 5 // MUCH FURTHER DOWN album.add1989Songs()
  • 36. let album = tSwift1989Album() album.add1989Songs() album.songs.count // 5 // MUCH FURTHER DOWN album.add1989Songs() album.songs.count // 10
  • 37. let album = tSwift1989Album() album.add1989Songs() album.songs.count // 5 album.add1989Songs() album.songs.count // 10 album.add1989Songs() album.songs.count // 15 album.add1989Songs() album.songs.count // 20
  • 38. /// Return an `Array` containing the elements `x` of `self` for which /// `includeElement(x)` is `true` func filter(includeElement: (T) -> Bool) -> [T]
  • 39. class tSwift1989Album { let title = "1989" var songs = [Song]() func add1989SongsWithFilter() { songs = tSwiftSongs.filter({ song in song.album == "1989"}) } }
  • 40. songs = tSwiftSongs.filter({ song in song.album == "1989"})
  • 41. songs = tSwiftSongs.filter({ song in song.album == "1989"}) songs = tSwiftSongs.filter({ $0.album == "1989"})
  • 42. songs = tSwiftSongs.filter({ song in song.album == "1989"}) songs = tSwiftSongs.filter({ $0.album == "1989"}) songs = tSwiftSongs.filter { $0.album == "1989"}
  • 43. let album = tSwift1989Album() album.add1989SongsWithFilter() album.songs.count // 5 album.add1989SongsWithFilter() album.songs.count // 5 album.add1989SongsWithFilter() album.songs.count // 5 album.add1989SongsWithFilter() album.songs.count // 5 album.add1989SongsWithFilter() album.songs.count // 5