SlideShare una empresa de Scribd logo
1 de 40
Descargar para leer sin conexión
Quick Swift Tour
Swift Language 
• Fast! 
• Modern! 
• Safe! 
• Interactive
Fast 
• Swift code is compiled and optimised by the 
advanced LLVM compiler 
• ARM and x86-64 native code 
• Tuned native collections 
• Swift-specific optimiser 
• C-like procedural performance
Modern 
• Clean syntax! 
• No headers! 
• No semicolons ! 
• Multiple return values! 
• Optional arguments ! 
• Closures! 
• Generics
Safe 
• Type safety with type inference! 
• No uninitialized data! 
• Array bounds checks! 
• Restricts direct access to pointers! 
• Automatically manages memory using ARC
Interactive 
• REPL 
• Playgrounds
Swift Tour
• Variable and Constant! 
• String! 
• Array, Dictionary! 
• Optionals! 
• Control Flow! 
• Function / Closure! 
• Class! 
• Enum / Struct! 
• Protocol / Extension! 
• Generics
Variables / Constants 
! 
// variable 
var myVariable = 42 
myVariable = 50 
! 
// constant 
let myConstant = 42 
//myConstant = 1 <- compile error 
! 
! 
// How to specify type 
var age: Int = 34 
let distance: Double = 2.0
String 
! 
let age = 34 
let label = "Age: " 
! 
! 
// Values are never implicitly converted to 
another type. 
let desc1 = label + String(age) 
! 
// Simpler way with a backslash() 
let desc2 = "Age: (age)”
Array, Dictionary 
! 
// Create arrays and dictionaries using brackets ([]) 
! 
// Array 
var iOSMembers = ["ichinose", "hato", "horimi", 
"tasaka", "watanabe"] 
! 
// Dictionary 
let appMember = ["ios": iOSMembers] 
! 
! 
// Use initializer syntax to create an empty array or 
dictionary 
var emptyArray = [String]() 
var emptyDict = [String: Int]()
Optionals
nil in Swift 
• Swift’s nil is not the same as nil in Objective-C. 
In Swift, nil cannot be set to variables and 
constants… 
! 
var value: Int = 10 
value = nil // compile error 
let value1: String = nil // compile error 
• Objective-C: 
nil is a pointer to a nonexistent object. 
• Swift: 
nil is the absence of a value.
Optionals 
• Optionals indicate that a constant or variable is 
allowed to have “no value” 
! 
var serverResponseCode: Int? = 404 
// serverResponseCode contains an actual Int value of 
404 
! 
serverResponseCode = nil 
// serverResponseCode now contains no value 
! 
// When no default value is set, 
// surveyAnswer is automatically set to nil 
var surveyAnswer: String?
If Statements and 
Forced Unwrapping 
! 
let optionalValue: Int? = 10 
! 
// (==) and (!=) can be used for nil check 
if optionalValue != nil { 
// Use "!" to access underlying value of optionalValue 
println("optionalValue has an integer value of 
(optionalValue!).") 
}
Implicitly Unwrapped Optional 
• Placing an exclamation mark (String!) rather than a question mark (String?) 
• Useful when an optional value will always have a value 
• No need to check and unwrap the optional’s value every time it is accessed 
! 
let possibleString: String? = "An optional string." 
! 
// requires an exclamation mark 
let forcedString: String = possibleString! 
!! 
let assumedString: String! = "An implicitly unwrapped optional 
string." 
! 
// no need for an exclamation mark 
let implicitString: String = assumedString
Control Flow
for 
! 
var firstForLoop = 0 
for i in 0...3 { // equal to 0..<4 
firstForLoop += i 
} 
!! 
let interestingNumbers = [ 
"Prime": [2, 3, 5, 7, 11, 13], 
"Fibonacci": [1, 1, 2, 3, 5, 8], 
] 
var largest = 0 
// key and value can be passed 
for (kind, numbers) in interestingNumbers { 
for number in numbers { 
if number > largest { 
largest = number 
} 
} 
}
switch 
! 
let value: Int = 10 
switch value { 
case 0: 
println("(value)") 
case 1..<3: // range comparison 
println("(value)") 
case 4, 5: 
println("(value)") 
default: 
println("(value)") 
} 
• Flexible matching patterns 
• No break 
• default must appear last
switch 
• switch are NOT limited to integers! 
! 
let vegetable = "red pepper” 
! 
var vegetableComment: String 
switch vegetable { 
case "celery": 
vegetableComment = "Add some raisins and make ants on a log.” 
! 
case "cucumber", "watercress": 
vegetableComment = "That would make a good tea sandwich." 
! 
case let x where x.hasSuffix("pepper"): 
vegetableComment = "Is it a spicy (x)?" 
! 
default: 
vegetableComment = "Everything tastes good in soup." 
}
Functions and Closures
Functions 
func sayHello(personName: String) -> String { 
let greeting = "Hello, " + personName + "!" 
return greeting 
} 
! 
sayHello("Ameba")
Functions 
• Functions are first-class type. 
// return value 
func makeIncrementer() -> (Int -> Int) { 
func addOne(number: Int) -> Int { 
return 1 + number 
} 
return addOne 
} 
! 
// argument 
func hasAnyMatches(list: [Int], condition: Int -> Bool) -> Bool { 
for item in list { 
if condition(item) { return true } 
} 
return false 
} 
func lessThanTen(number: Int) -> Bool { 
return number < 10 
} 
var numbers = [20, 19, 7, 12] 
hasAnyMatches(numbers, lessThanTen)
Closures 
• Similar to blocks in Objective-C! 
• Simple Syntax 
! 
// Closure Expression Syntax 
{ (parameters) -> return type in 
statements 
} 
! 
// e.g. 
let names = ["horimi", "ichinose", "watanabe", "hato", "tasaka"] 
var reversed = sorted(names, { (s1: String, s2: String) -> Bool in 
return s1 > s2 
})
Closures 
! 
// Inferring Type From Context 
reversed = sorted(names, { s1, s2 in return s1 > s2 } ) 
! 
// Implicit Returns from Single-Expression Closures 
reversed = sorted(names, { s1, s2 in s1 > s2 } ) 
! 
// Shorthand Argument Names 
reversed = sorted(names, { $0 > $1 } )
Class
Class 
! 
class NamedShape { 
// properties 
var numberOfSides: Int = 0 
var name: String 
// initializer 
init(name: String) { 
self.name = name 
} 
// method 
func simpleDescription() -> String { 
return "A shape with (numberOfSides) sides." 
} 
}
Inheritance 
! 
class Square: NamedShape { 
var sideLength: Double 
! 
// initializer 
init(sideLength: Double, name: String) { 
// initialize before calling super.init 
self.sideLength = sideLength 
super.init(name: name) 
numberOfSides = 4 
} 
func area() -> Double { 
return sideLength * sideLength 
} 
// overriding super's method 
override func simpleDescription() -> String { 
return "A square with sides of length (sideLength)." 
} 
}
getter/setter 
! 
class EquilateralTriangle: NamedShape { 
var sideLength: Double = 0.0 
init(sideLength: Double, name: String) { 
self.sideLength = sideLength 
super.init(name: name) 
numberOfSides = 3 
} 
! 
// getter / setter 
var perimeter: Double { 
get { 
return 3.0 * sideLength 
} 
set { 
sideLength = newValue / 3.0 
} 
} 
override func simpleDescription() -> String { 
return "An equilateral triangle with sides of length (sideLength)." 
} 
}
Property Observers 
! 
class StepCounter { 
var totalSteps: Int = 0 { 
willSet(newTotalSteps) { 
println("About to set totalSteps to (newTotalSteps)") 
} 
didSet { 
if totalSteps > oldValue { 
println("Added (totalSteps - oldValue) steps") 
} 
} 
} 
} 
! 
let stepCounter = StepCounter() 
stepCounter.totalSteps = 200 
// About to set totalSteps to 200 
// Added 200 steps
Enum and Struct
Enum 
• Enumerations can have methods! 
! 
enum Rank: Int { 
case Ace = 1 
case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten 
case Jack, Queen, King 
func simpleDescription() -> String { 
switch self { 
case .Ace: return "ace" 
case .Jack: return "jack" 
case .Queen:return "queen" 
case .King: return "king" 
default: return String(self.toRaw()) 
} 
} 
}
Struct 
! 
struct Card { 
var rank: Rank 
var suit: Suit 
func simpleDescription() -> String { 
return "The (rank.simpleDescription()) of  
(suit.simpleDescription())" 
} 
} 
• Similar to Classes!! 
• Difference:! 
• Class: Reference type! 
• Struct: Value type
Protocols and Extensions
Protocols 
! 
protocol ExampleProtocol { 
var simpleDescription: String { get } 
mutating func adjust() 
} 
• In addition to classes, enumerations and 
structs can adopt protocols!
Protocols 
struct SimpleStructure: ExampleProtocol { 
var simpleDescription: String = "A simple structure" 
mutating func adjust() { 
simpleDescription += " (adjusted)" 
} 
} 
! 
class SimpleClass: ExampleProtocol { 
var simpleDescription: String = "A very simple class." 
var anotherProperty: Int = 69105 
func adjust() { 
simpleDescription += " Now 100% adjusted." 
} 
} 
• mutating keyword means methods modify structure 
• Class doesn’t need its methods marked as mutating keyword
Extensions 
• Similar to Categories in Objective-C 
! 
extension SomeType { 
// new functionality to add to SomeType goes here 
} 
! 
extension SomeType: SomeProtocol, AnotherProtocol { 
// implementation of protocol requirements goes here 
}
Generics 
• Generics is Template in C++ 
• Much of the Swift standard library is built with generic code 
! 
func repeat<ItemType>(item: ItemType, times: Int) -> [ItemType] { 
var result = [ItemType]() 
for i in 0..<times { 
result += item 
} 
return result 
} 
repeat("knock", 4)
Wrap Up 
• Looking through basic Swift features 
• Non Objective-C can get familiar, maybe. 
• To Learn Swift, 
check out The Swift Programming Language. 
https://developer.apple.com/library/ios/ 
documentation/Swift/Conceptual/ 
Swift_Programming_Language/
Thank you!

Más contenido relacionado

La actualidad más candente

Typed Properties and more: What's coming in PHP 7.4?
Typed Properties and more: What's coming in PHP 7.4?Typed Properties and more: What's coming in PHP 7.4?
Typed Properties and more: What's coming in PHP 7.4?Nikita Popov
 
Introduction to Javascript
Introduction to JavascriptIntroduction to Javascript
Introduction to JavascriptAmit Tyagi
 
Demystifying Shapeless
Demystifying Shapeless Demystifying Shapeless
Demystifying Shapeless Jared Roesch
 
Denis Lebedev, Swift
Denis  Lebedev, SwiftDenis  Lebedev, Swift
Denis Lebedev, SwiftYandex
 
Protocols with Associated Types, and How They Got That Way
Protocols with Associated Types, and How They Got That WayProtocols with Associated Types, and How They Got That Way
Protocols with Associated Types, and How They Got That WayAlexis Gallagher
 
PHP Performance Trivia
PHP Performance TriviaPHP Performance Trivia
PHP Performance TriviaNikita Popov
 
Nikita Popov "What’s new in PHP 8.0?"
Nikita Popov "What’s new in PHP 8.0?"Nikita Popov "What’s new in PHP 8.0?"
Nikita Popov "What’s new in PHP 8.0?"Fwdays
 
String and string manipulation
String and string manipulationString and string manipulation
String and string manipulationShahjahan Samoon
 
TypeScript Introduction
TypeScript IntroductionTypeScript Introduction
TypeScript IntroductionDmitry Sheiko
 
Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]Aaron Gustafson
 
JavaScript Tutorial
JavaScript  TutorialJavaScript  Tutorial
JavaScript TutorialBui Kiet
 
Swift, functional programming, and the future of Objective-C
Swift, functional programming, and the future of Objective-CSwift, functional programming, and the future of Objective-C
Swift, functional programming, and the future of Objective-CAlexis Gallagher
 
Swift Programming Language
Swift Programming LanguageSwift Programming Language
Swift Programming LanguageGiuseppe Arici
 
Javascript basic course
Javascript basic courseJavascript basic course
Javascript basic courseTran Khoa
 
A Re-Introduction to JavaScript
A Re-Introduction to JavaScriptA Re-Introduction to JavaScript
A Re-Introduction to JavaScriptSimon Willison
 
PHP 8.1 - What's new and changed
PHP 8.1 - What's new and changedPHP 8.1 - What's new and changed
PHP 8.1 - What's new and changedAyesh Karunaratne
 
Introduction To Scala
Introduction To ScalaIntroduction To Scala
Introduction To ScalaPeter Maas
 

La actualidad más candente (20)

Typed Properties and more: What's coming in PHP 7.4?
Typed Properties and more: What's coming in PHP 7.4?Typed Properties and more: What's coming in PHP 7.4?
Typed Properties and more: What's coming in PHP 7.4?
 
Introduction to Javascript
Introduction to JavascriptIntroduction to Javascript
Introduction to Javascript
 
Demystifying Shapeless
Demystifying Shapeless Demystifying Shapeless
Demystifying Shapeless
 
Denis Lebedev, Swift
Denis  Lebedev, SwiftDenis  Lebedev, Swift
Denis Lebedev, Swift
 
Protocols with Associated Types, and How They Got That Way
Protocols with Associated Types, and How They Got That WayProtocols with Associated Types, and How They Got That Way
Protocols with Associated Types, and How They Got That Way
 
Introduction to Swift 2
Introduction to Swift 2Introduction to Swift 2
Introduction to Swift 2
 
PHP Performance Trivia
PHP Performance TriviaPHP Performance Trivia
PHP Performance Trivia
 
Nikita Popov "What’s new in PHP 8.0?"
Nikita Popov "What’s new in PHP 8.0?"Nikita Popov "What’s new in PHP 8.0?"
Nikita Popov "What’s new in PHP 8.0?"
 
String and string manipulation
String and string manipulationString and string manipulation
String and string manipulation
 
TypeScript Introduction
TypeScript IntroductionTypeScript Introduction
TypeScript Introduction
 
Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]
 
JavaScript Tutorial
JavaScript  TutorialJavaScript  Tutorial
JavaScript Tutorial
 
Swift, functional programming, and the future of Objective-C
Swift, functional programming, and the future of Objective-CSwift, functional programming, and the future of Objective-C
Swift, functional programming, and the future of Objective-C
 
Swift Programming Language
Swift Programming LanguageSwift Programming Language
Swift Programming Language
 
Javascript basic course
Javascript basic courseJavascript basic course
Javascript basic course
 
A Re-Introduction to JavaScript
A Re-Introduction to JavaScriptA Re-Introduction to JavaScript
A Re-Introduction to JavaScript
 
JavaScript Basics
JavaScript BasicsJavaScript Basics
JavaScript Basics
 
Scala fundamentals
Scala fundamentalsScala fundamentals
Scala fundamentals
 
PHP 8.1 - What's new and changed
PHP 8.1 - What's new and changedPHP 8.1 - What's new and changed
PHP 8.1 - What's new and changed
 
Introduction To Scala
Introduction To ScalaIntroduction To Scala
Introduction To Scala
 

Similar a Quick swift tour

NSCoder Swift - An Introduction to Swift
NSCoder Swift - An Introduction to SwiftNSCoder Swift - An Introduction to Swift
NSCoder Swift - An Introduction to SwiftAndreas Blick
 
An introduction to functional programming with Swift
An introduction to functional programming with SwiftAn introduction to functional programming with Swift
An introduction to functional programming with SwiftFatih Nayebi, Ph.D.
 
Swift - the future of iOS app development
Swift - the future of iOS app developmentSwift - the future of iOS app development
Swift - the future of iOS app developmentopenak
 
String and string manipulation x
String and string manipulation xString and string manipulation x
String and string manipulation xShahjahan Samoon
 
iOS development using Swift - Swift Basics (2)
iOS development using Swift - Swift Basics (2)iOS development using Swift - Swift Basics (2)
iOS development using Swift - Swift Basics (2)Ahmed Ali
 
Introduction to Kotlin for Android developers
Introduction to Kotlin for Android developersIntroduction to Kotlin for Android developers
Introduction to Kotlin for Android developersMohamed Wael
 
Kotlin Basics - Apalon Kotlin Sprint Part 2
Kotlin Basics - Apalon Kotlin Sprint Part 2Kotlin Basics - Apalon Kotlin Sprint Part 2
Kotlin Basics - Apalon Kotlin Sprint Part 2Kirill Rozov
 
Basics of Javascript
Basics of JavascriptBasics of Javascript
Basics of JavascriptUniverse41
 
iOS Development using Swift: Enums, ARC, Delegation, Closures, Table View and...
iOS Development using Swift: Enums, ARC, Delegation, Closures, Table View and...iOS Development using Swift: Enums, ARC, Delegation, Closures, Table View and...
iOS Development using Swift: Enums, ARC, Delegation, Closures, Table View and...Ahmed Ali
 
Operators loops conditional and statements
Operators loops conditional and statementsOperators loops conditional and statements
Operators loops conditional and statementsVladislav Hadzhiyski
 
The Java Script Programming Language
The  Java Script  Programming  LanguageThe  Java Script  Programming  Language
The Java Script Programming Languagezone
 
The JavaScript Programming Language
The JavaScript Programming LanguageThe JavaScript Programming Language
The JavaScript Programming LanguageRaghavan Mohan
 
Les origines de Javascript
Les origines de JavascriptLes origines de Javascript
Les origines de JavascriptBernard Loire
 
Javascript by Yahoo
Javascript by YahooJavascript by Yahoo
Javascript by Yahoobirbal
 

Similar a Quick swift tour (20)

kotlin-nutshell.pptx
kotlin-nutshell.pptxkotlin-nutshell.pptx
kotlin-nutshell.pptx
 
02basics
02basics02basics
02basics
 
NSCoder Swift - An Introduction to Swift
NSCoder Swift - An Introduction to SwiftNSCoder Swift - An Introduction to Swift
NSCoder Swift - An Introduction to Swift
 
An introduction to functional programming with Swift
An introduction to functional programming with SwiftAn introduction to functional programming with Swift
An introduction to functional programming with Swift
 
Javascript
JavascriptJavascript
Javascript
 
Swift - the future of iOS app development
Swift - the future of iOS app developmentSwift - the future of iOS app development
Swift - the future of iOS app development
 
String and string manipulation x
String and string manipulation xString and string manipulation x
String and string manipulation x
 
iOS development using Swift - Swift Basics (2)
iOS development using Swift - Swift Basics (2)iOS development using Swift - Swift Basics (2)
iOS development using Swift - Swift Basics (2)
 
Introduction to Kotlin for Android developers
Introduction to Kotlin for Android developersIntroduction to Kotlin for Android developers
Introduction to Kotlin for Android developers
 
Kotlin Basics - Apalon Kotlin Sprint Part 2
Kotlin Basics - Apalon Kotlin Sprint Part 2Kotlin Basics - Apalon Kotlin Sprint Part 2
Kotlin Basics - Apalon Kotlin Sprint Part 2
 
Basics of Javascript
Basics of JavascriptBasics of Javascript
Basics of Javascript
 
iOS Development using Swift: Enums, ARC, Delegation, Closures, Table View and...
iOS Development using Swift: Enums, ARC, Delegation, Closures, Table View and...iOS Development using Swift: Enums, ARC, Delegation, Closures, Table View and...
iOS Development using Swift: Enums, ARC, Delegation, Closures, Table View and...
 
Operators loops conditional and statements
Operators loops conditional and statementsOperators loops conditional and statements
Operators loops conditional and statements
 
Should i Go there
Should i Go thereShould i Go there
Should i Go there
 
Java Tutorial
Java Tutorial Java Tutorial
Java Tutorial
 
The Java Script Programming Language
The  Java Script  Programming  LanguageThe  Java Script  Programming  Language
The Java Script Programming Language
 
The JavaScript Programming Language
The JavaScript Programming LanguageThe JavaScript Programming Language
The JavaScript Programming Language
 
Les origines de Javascript
Les origines de JavascriptLes origines de Javascript
Les origines de Javascript
 
Javascript by Yahoo
Javascript by YahooJavascript by Yahoo
Javascript by Yahoo
 
Javascript
JavascriptJavascript
Javascript
 

Último

UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6DianaGray10
 
Comparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioComparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioChristian Posta
 
Introduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxIntroduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxMatsuo Lab
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaborationbruanjhuli
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...DianaGray10
 
COMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a WebsiteCOMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a Websitedgelyza
 
Videogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfVideogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfinfogdgmi
 
20230202 - Introduction to tis-py
20230202 - Introduction to tis-py20230202 - Introduction to tis-py
20230202 - Introduction to tis-pyJamie (Taka) Wang
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding TeamAdam Moalla
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Will Schroeder
 
Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024D Cloud Solutions
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Adtran
 
Building AI-Driven Apps Using Semantic Kernel.pptx
Building AI-Driven Apps Using Semantic Kernel.pptxBuilding AI-Driven Apps Using Semantic Kernel.pptx
Building AI-Driven Apps Using Semantic Kernel.pptxUdaiappa Ramachandran
 
Empowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintEmpowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintMahmoud Rabie
 
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostKubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostMatt Ray
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationIES VE
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8DianaGray10
 
Cybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptxCybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptxGDSC PJATK
 
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesAI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesMd Hossain Ali
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsSeth Reyes
 

Último (20)

UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6
 
Comparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioComparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and Istio
 
Introduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxIntroduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptx
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
 
COMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a WebsiteCOMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a Website
 
Videogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfVideogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdf
 
20230202 - Introduction to tis-py
20230202 - Introduction to tis-py20230202 - Introduction to tis-py
20230202 - Introduction to tis-py
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
 
Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™
 
Building AI-Driven Apps Using Semantic Kernel.pptx
Building AI-Driven Apps Using Semantic Kernel.pptxBuilding AI-Driven Apps Using Semantic Kernel.pptx
Building AI-Driven Apps Using Semantic Kernel.pptx
 
Empowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintEmpowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership Blueprint
 
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostKubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8
 
Cybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptxCybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptx
 
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesAI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and Hazards
 

Quick swift tour

  • 2. Swift Language • Fast! • Modern! • Safe! • Interactive
  • 3. Fast • Swift code is compiled and optimised by the advanced LLVM compiler • ARM and x86-64 native code • Tuned native collections • Swift-specific optimiser • C-like procedural performance
  • 4. Modern • Clean syntax! • No headers! • No semicolons ! • Multiple return values! • Optional arguments ! • Closures! • Generics
  • 5. Safe • Type safety with type inference! • No uninitialized data! • Array bounds checks! • Restricts direct access to pointers! • Automatically manages memory using ARC
  • 6. Interactive • REPL • Playgrounds
  • 8. • Variable and Constant! • String! • Array, Dictionary! • Optionals! • Control Flow! • Function / Closure! • Class! • Enum / Struct! • Protocol / Extension! • Generics
  • 9. Variables / Constants ! // variable var myVariable = 42 myVariable = 50 ! // constant let myConstant = 42 //myConstant = 1 <- compile error ! ! // How to specify type var age: Int = 34 let distance: Double = 2.0
  • 10. String ! let age = 34 let label = "Age: " ! ! // Values are never implicitly converted to another type. let desc1 = label + String(age) ! // Simpler way with a backslash() let desc2 = "Age: (age)”
  • 11. Array, Dictionary ! // Create arrays and dictionaries using brackets ([]) ! // Array var iOSMembers = ["ichinose", "hato", "horimi", "tasaka", "watanabe"] ! // Dictionary let appMember = ["ios": iOSMembers] ! ! // Use initializer syntax to create an empty array or dictionary var emptyArray = [String]() var emptyDict = [String: Int]()
  • 13. nil in Swift • Swift’s nil is not the same as nil in Objective-C. In Swift, nil cannot be set to variables and constants… ! var value: Int = 10 value = nil // compile error let value1: String = nil // compile error • Objective-C: nil is a pointer to a nonexistent object. • Swift: nil is the absence of a value.
  • 14. Optionals • Optionals indicate that a constant or variable is allowed to have “no value” ! var serverResponseCode: Int? = 404 // serverResponseCode contains an actual Int value of 404 ! serverResponseCode = nil // serverResponseCode now contains no value ! // When no default value is set, // surveyAnswer is automatically set to nil var surveyAnswer: String?
  • 15. If Statements and Forced Unwrapping ! let optionalValue: Int? = 10 ! // (==) and (!=) can be used for nil check if optionalValue != nil { // Use "!" to access underlying value of optionalValue println("optionalValue has an integer value of (optionalValue!).") }
  • 16. Implicitly Unwrapped Optional • Placing an exclamation mark (String!) rather than a question mark (String?) • Useful when an optional value will always have a value • No need to check and unwrap the optional’s value every time it is accessed ! let possibleString: String? = "An optional string." ! // requires an exclamation mark let forcedString: String = possibleString! !! let assumedString: String! = "An implicitly unwrapped optional string." ! // no need for an exclamation mark let implicitString: String = assumedString
  • 18. for ! var firstForLoop = 0 for i in 0...3 { // equal to 0..<4 firstForLoop += i } !! let interestingNumbers = [ "Prime": [2, 3, 5, 7, 11, 13], "Fibonacci": [1, 1, 2, 3, 5, 8], ] var largest = 0 // key and value can be passed for (kind, numbers) in interestingNumbers { for number in numbers { if number > largest { largest = number } } }
  • 19. switch ! let value: Int = 10 switch value { case 0: println("(value)") case 1..<3: // range comparison println("(value)") case 4, 5: println("(value)") default: println("(value)") } • Flexible matching patterns • No break • default must appear last
  • 20. switch • switch are NOT limited to integers! ! let vegetable = "red pepper” ! var vegetableComment: String switch vegetable { case "celery": vegetableComment = "Add some raisins and make ants on a log.” ! case "cucumber", "watercress": vegetableComment = "That would make a good tea sandwich." ! case let x where x.hasSuffix("pepper"): vegetableComment = "Is it a spicy (x)?" ! default: vegetableComment = "Everything tastes good in soup." }
  • 22. Functions func sayHello(personName: String) -> String { let greeting = "Hello, " + personName + "!" return greeting } ! sayHello("Ameba")
  • 23. Functions • Functions are first-class type. // return value func makeIncrementer() -> (Int -> Int) { func addOne(number: Int) -> Int { return 1 + number } return addOne } ! // argument func hasAnyMatches(list: [Int], condition: Int -> Bool) -> Bool { for item in list { if condition(item) { return true } } return false } func lessThanTen(number: Int) -> Bool { return number < 10 } var numbers = [20, 19, 7, 12] hasAnyMatches(numbers, lessThanTen)
  • 24. Closures • Similar to blocks in Objective-C! • Simple Syntax ! // Closure Expression Syntax { (parameters) -> return type in statements } ! // e.g. let names = ["horimi", "ichinose", "watanabe", "hato", "tasaka"] var reversed = sorted(names, { (s1: String, s2: String) -> Bool in return s1 > s2 })
  • 25. Closures ! // Inferring Type From Context reversed = sorted(names, { s1, s2 in return s1 > s2 } ) ! // Implicit Returns from Single-Expression Closures reversed = sorted(names, { s1, s2 in s1 > s2 } ) ! // Shorthand Argument Names reversed = sorted(names, { $0 > $1 } )
  • 26. Class
  • 27. Class ! class NamedShape { // properties var numberOfSides: Int = 0 var name: String // initializer init(name: String) { self.name = name } // method func simpleDescription() -> String { return "A shape with (numberOfSides) sides." } }
  • 28. Inheritance ! class Square: NamedShape { var sideLength: Double ! // initializer init(sideLength: Double, name: String) { // initialize before calling super.init self.sideLength = sideLength super.init(name: name) numberOfSides = 4 } func area() -> Double { return sideLength * sideLength } // overriding super's method override func simpleDescription() -> String { return "A square with sides of length (sideLength)." } }
  • 29. getter/setter ! class EquilateralTriangle: NamedShape { var sideLength: Double = 0.0 init(sideLength: Double, name: String) { self.sideLength = sideLength super.init(name: name) numberOfSides = 3 } ! // getter / setter var perimeter: Double { get { return 3.0 * sideLength } set { sideLength = newValue / 3.0 } } override func simpleDescription() -> String { return "An equilateral triangle with sides of length (sideLength)." } }
  • 30. Property Observers ! class StepCounter { var totalSteps: Int = 0 { willSet(newTotalSteps) { println("About to set totalSteps to (newTotalSteps)") } didSet { if totalSteps > oldValue { println("Added (totalSteps - oldValue) steps") } } } } ! let stepCounter = StepCounter() stepCounter.totalSteps = 200 // About to set totalSteps to 200 // Added 200 steps
  • 32. Enum • Enumerations can have methods! ! enum Rank: Int { case Ace = 1 case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten case Jack, Queen, King func simpleDescription() -> String { switch self { case .Ace: return "ace" case .Jack: return "jack" case .Queen:return "queen" case .King: return "king" default: return String(self.toRaw()) } } }
  • 33. Struct ! struct Card { var rank: Rank var suit: Suit func simpleDescription() -> String { return "The (rank.simpleDescription()) of (suit.simpleDescription())" } } • Similar to Classes!! • Difference:! • Class: Reference type! • Struct: Value type
  • 35. Protocols ! protocol ExampleProtocol { var simpleDescription: String { get } mutating func adjust() } • In addition to classes, enumerations and structs can adopt protocols!
  • 36. Protocols struct SimpleStructure: ExampleProtocol { var simpleDescription: String = "A simple structure" mutating func adjust() { simpleDescription += " (adjusted)" } } ! class SimpleClass: ExampleProtocol { var simpleDescription: String = "A very simple class." var anotherProperty: Int = 69105 func adjust() { simpleDescription += " Now 100% adjusted." } } • mutating keyword means methods modify structure • Class doesn’t need its methods marked as mutating keyword
  • 37. Extensions • Similar to Categories in Objective-C ! extension SomeType { // new functionality to add to SomeType goes here } ! extension SomeType: SomeProtocol, AnotherProtocol { // implementation of protocol requirements goes here }
  • 38. Generics • Generics is Template in C++ • Much of the Swift standard library is built with generic code ! func repeat<ItemType>(item: ItemType, times: Int) -> [ItemType] { var result = [ItemType]() for i in 0..<times { result += item } return result } repeat("knock", 4)
  • 39. Wrap Up • Looking through basic Swift features • Non Objective-C can get familiar, maybe. • To Learn Swift, check out The Swift Programming Language. https://developer.apple.com/library/ios/ documentation/Swift/Conceptual/ Swift_Programming_Language/