Swift is the latest new programming language for iOS and OS X apps that builds on the best of C and Objective-C, without the constraints of C compatibility.
2. What you will learn
Presenter: Waseem Ahmad, Mindfire Solutions
What is Swift?
Variable
Constants
Type Inference
Type Aliases
String/Character Interpolation
Array and Dictionary
Loops
Optionals, Unwrapping an Optional
Functions
Tuples
Classes
Properties
Closures
Q & A
3. What is Swift ?
• Swift is Apple’s modern, type-safe language for Cocoa development that
builds on the best of C and Objective-C
• Safe
• Modern
• Power
Presenter: Waseem Ahmad, Mindfire Solutions
4. Variables
var variableName : String = “Swift”
var version: Double = 1.0
var day: Int = 28
var isAnimated: Bool = true
Presenter: Waseem Ahmad, Mindfire Solutions
5. Constants &Variables
let variableName: String = “Swift”
var version: Double = 1.0
var day: Int = 28
var isAnimated: Bool = true
Pretty clear which is constant and mutable, it’s define safe code in multithreaded
environment. Make code more clear and readable.
Presenter: Waseem Ahmad, Mindfire Solutions
6. Constants &Variables
let variableName: String = “Swift”
var version: Double = 1.0
let day: Int = 28
let isAnimated: Bool = true
Presenter: Waseem Ahmad, Mindfire Solutions
7. Type Inference
let variableName = “Swift” // As String
var version = 1.0 // As Double/Float
let day = 28 // As Int
let isAnimated = true // As Boolean
Code safe, these are valuable & constant explicitly type.
Presenter: Waseem Ahmad, Mindfire Solutions
8. Type Aliases
An alternative name for an existing type.
typealias AudioSample = UInt16
var maxAmplitudeFound = AudioSample.min
Presenter: Waseem Ahmad, Mindfire Solutions
9. Unicode Names
let variableName = “Swift” // As String
var version = 1.0 // As Double/Float
let day = 28 // As Int
let isAnimated = true // As Boolean
let π = 3.1415927
let � = "emoji"�
Presenter: Waseem Ahmad, Mindfire Solutions
10. String
var studentName: String = “Waseem”
var studentName = “Waseem” // Inferred to be of type string
Presenter: Waseem Ahmad, Mindfire Solutions
11. String
var studentName: String = “Waseem”
var studentName = “Waseem” // Inferred to be of type string
var documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
documentsPath = documentsPath.stringByAppendingString(subpath)
Presenter: Waseem Ahmad, Mindfire Solutions
12. Character
let studentName = “Waseem"
for character in studentName {
println(character)
}
W
a
s
e
e
m
Presenter: Waseem Ahmad, Mindfire Solutions
13. Complex String
var name = “Waseem”
var coins = 100
Congratulations, Waseem won 100 coins.
Presenter: Waseem Ahmad, Mindfire Solutions
14. String Interpolation
var name = “Waseem”
var coins = 100
Congratulations, Waseem won 100 coins.
let message = “Congratulations, (name) won (coins)”.
Presenter: Waseem Ahmad, Mindfire Solutions
20. Array and Dictionary Literals
var names = [“John”, “Bob”, "Brian", "Jack"]
Presenter: Waseem Ahmad, Mindfire Solutions
21. Array and Dictionary Literals
var names = [“John”, “Bob”, "Brian", “Jack"]
var numberOfLegs = ["ant": 6, "snake": 0, "cheetah": 4]
Presenter: Waseem Ahmad, Mindfire Solutions
22. Difference Between NSArray &
NSDictionary
- It could work with any type (String, Int etc)
- Collection are typed collection
Presenter: Waseem Ahmad, Mindfire Solutions
25. Typed Collection
var names = [“John”, “Bob”, "Brian", “Jack”]
// An array of String Values
var numberOfLegs = ["ant": 6, "snake": 0, "cheetah": 4]
// An Dictionary With String Keys and Int Values
Typed collection made your code safe, you well know what you are retrieving and
adding.
Presenter: Waseem Ahmad, Mindfire Solutions
27. For-In: Strings and Characters
let studentName = “Waseem"
for character in studentName {
println(character)
}
W
a
s
e
e
m
Swift Power, we can use character & emoji in similar way.
Presenter: Waseem Ahmad, Mindfire Solutions
28. For-In: Ranges
for number in 1...5 { // Clause Range
println("(number) times 4 is (number * 4)")
}
1 times 4 is 4
2 times 4 is 8
3 times 4 is 12
4 times 4 is 16
5 times 4 is 20
Presenter: Waseem Ahmad, Mindfire Solutions
29. For-In: Ranges
for number in 0..5 { // half clause range
println("(number) times 4 is (number * 4)")
}
0 times 4 is 0
1 times 4 is 4
2 times 4 is 8
3 times 4 is 12
4 times 4 is 16
Presenter: Waseem Ahmad, Mindfire Solutions
30. For-In: Array
var names = [“John”, “Bob”, "Brian", "Jack"]
for name in names {
println("Hello (name)")
}
Presenter: Waseem Ahmad, Mindfire Solutions
31. For-In: Dictionaries
let numberOfLegs = ["ant": 6, "snake": 0, "cheetah": 4]
!
for (animalName, legCount) in numberOfLegs {
println("(animalName)s have (legCount) legs")
}
ants have 6 legs
Power of swift extracting key and value in single loop, grouping of value is a power
full feature of swift i.e Tuples
Presenter: Waseem Ahmad, Mindfire Solutions
32. Modification in Array
var shoppingList = ["Eggs", "Milk"]
println(shoppingList[0])
Presenter: Waseem Ahmad, Mindfire Solutions
37. Modification in Dictionary
var numberOfLegs = ["ant": 6, "snake": 0, "cheetah": 4]
numberOfLegs["spider"] = 273
numberOfLegs["spider"] = 8
What happen if we try to fetch a value that doesn’t have in array and dictionary?
let lionLegCount = numberOfLegs[“lion”] // Nothing at all :)
Presenter: Waseem Ahmad, Mindfire Solutions
39. Optional
var numberOfLegs = ["ant": 6, "snake": 0, "cheetah": 4]
let lionLegCount: Int? = numberOfLegs[“lion"]
if lionLegCount == nil {
println("Lion wasn't found")
} else {
let legCount = lionLegCount! // unwrapping of optional value
println("An lion has (legCount) legs")
}
Presenter: Waseem Ahmad, Mindfire Solutions
40. Optional
if numberOfLegs {
let legCount = numberOfLegs!
println("An Lion has (legCount) legs")
}
Presenter: Waseem Ahmad, Mindfire Solutions
41. Unwrapping an Optional
if let legCount = numberOfLegs {
println("An Lion has (legCount) legs")
}
Note:- Braces are required with If :)
Presenter: Waseem Ahmad, Mindfire Solutions
42. Switch
switch legCount {
case 0:
println("It slithers and slides around”)
case 1:
println("It hops")
default:
println("It walks")
}
Presenter: Waseem Ahmad, Mindfire Solutions
43. Switch
switch sender {
case executeButton:
println("You tapped the Execute button")
case firstNameTextField:
println("You tapped the First Name text field")
default:
println("You tapped some other object")
}
Presenter: Waseem Ahmad, Mindfire Solutions
44. Switch
switch legCount {
case 0:
println("It slithers and slides around")!
case 1, 3, 5, 7, 9, 11, 13:
println("It limps")
case 2, 4, 6, 8, 10, 12, 14:
println("It walks")
}
// error: switch must be exhaustive
Presenter: Waseem Ahmad, Mindfire Solutions
46. Matching Value Ranges
switch legCount {
case 0:
println("It slithers and slides around")!
case 1…8:
println("It has few lags")
default:
println("It walks")
}
Presenter: Waseem Ahmad, Mindfire Solutions
52. Tuples
-Grouping a values
-Value could be any type
(3.79, 3.99, 4.19) // (Double, Double, Double)
(404, "Not found")
(2, "banana", 0.72)
-Tuple is not an replacement of structure but this is best when needs to
return multiple values like from function
func getUsernInfo() -> (Int, String) {
return (25, “John”)
}
Presenter: Waseem Ahmad, Mindfire Solutions
53. Decomposing of Tuples
func getUsernInfo() -> (Int, String) {
return (25, “John”)
}
let (age, name) = getUsernInfo()
println(“This is (name) and my age is (age)")
Presenter: Waseem Ahmad, Mindfire Solutions
54. Decomposing of Tuples
func getUsernInfo() -> (Int, String) {
return (25, “John”)
}
let (age, name) = getUsernInfo()
let (age: Int, name: String) = getUsernInfo()
println(“This is (name) and my age is (age)")
If you only need some of the tuple’s values, ignore parts of the tuple with an
underscore (_) when you decompose the tuple:
let (age, _) = getUsernInfo()
Presenter: Waseem Ahmad, Mindfire Solutions
55. Named Values in a Tuple
func getUsernInfo() -> (age: Int, name: String) {
return (25, “John”)
}
let userInfo = getUsernInfo()
println(“This is (userInfo.name) and my age is (userInfo.age)”)
Presenter: Waseem Ahmad, Mindfire Solutions
56. Classes
class Student {
// properties
// methods
// initializers
}
class Student: NSObject { // no need to derive a class with base as NSObject
}
We can create a subclass and inherited
class Medical: Student {
}
Presenter: Waseem Ahmad, Mindfire Solutions
57. Properties
class Student {
var rollNo = 1
var name: String?
// methods
// initializers
}
The big difference between objective c and swift is “no difference between Instance
variable and priorities”.
Here rollNo we can say as stored properties.
Presenter: Waseem Ahmad, Mindfire Solutions
58. Computed Properties
class Student {
var rollNo = 1
var name: String?
var description: String {
get {
return “Hi this (name!) and my roll number is (rollNo)“
}
}
}
Presenter: Waseem Ahmad, Mindfire Solutions
59. Computed Properties (RW)
class Student {
var rollNo = 1
var name: String?
var description: String {
get {
return “Hi this (name!) and my roll number is (rollNo)“
}
set {
}
}
}
Presenter: Waseem Ahmad, Mindfire Solutions
60. Computed Properties (Read)
class Student {
var rollNo = 1
var name: String?
var description: String {
return “Hi this (name!) and my roll number is (rollNo)“
}
}
Presenter: Waseem Ahmad, Mindfire Solutions
61. Initializer Class Syntax
class Student {
var rollNo = 1
var name: String?
var description: String {
return “Hi this (name!) and my roll number is (rollNo)“
}
}
let studentObj = Student()
println(studentObj.description)
- Automatic memory allocation
-No need to write type as Swift support Type Inference
let studentObj : Student = Student()
Presenter: Waseem Ahmad, Mindfire Solutions
62. Initializer Class Syntax
class Student {
var rollNo = 1
var name: String?
init() { // constructor
string = “Waseem”
}
var description: String {
return “Hi this (name!) and my roll number is (rollNo)“
}
}
Presenter: Waseem Ahmad, Mindfire Solutions
63. Overriding a Property
class Medical: Student {
init() {
super.init()
}
override var description: String { // Safe
return super.description + ", student of Medical"
}
}
Presenter: Waseem Ahmad, Mindfire Solutions
64. Property Observers
class Loan: Bank {
override var intrest: Double {
willSet {
// newValue is available here
if intrest > 10.0 {
// calculate // trigger
}
}
}
didSet {
// oldValue is available here
}
}
}
Presenter: Waseem Ahmad, Mindfire Solutions
65. Methods
class Student {
var rollNo = 1
var name: String?
func studentName(nameStr: String) {
name = nameStr
}
}
Presenter: Waseem Ahmad, Mindfire Solutions
66. Class Methods
class func isFileExistAtPath(filePath: NSString) -> Bool {
let filemanager = NSFileManager.defaultManager()
return filemanager.fileExistsAtPath(filePath)
}
Presenter: Waseem Ahmad, Mindfire Solutions
67. Class De-initialisation
class Student {
var rollNo = 1
var name: String?
init() { // constructor
fileOpen() //
}
deinit { // constructor
closeFile() //
}
}
Presenter: Waseem Ahmad, Mindfire Solutions
68. iPhone App to Advertise
Real Estate
Case Study
www.mindfiresolutions.com
69. Next Seminar: Swift in depth
Closures
Structures
Enum
Extensions
Memory Management
Optional Chaining
Generic type
Presenter: Waseem Ahmad, Mindfire Solutions
70. References
- Apple WWDC 2014
- Apple Inc. “The Swift Programming Language.” iBooks.
Presenter: Waseem Ahmad, Mindfire Solutions