swift-programming part 1

72
1 Introduction of Swift Presenter: Waseem Ahmad, Mindfire Solutions Date: 28/10/2014

Upload: mindfire-solutions

Post on 15-Jul-2015

185 views

Category:

Software


1 download

TRANSCRIPT

1

Introduction of Swift

Presenter: Waseem Ahmad, Mindfire SolutionsDate: 28/10/2014

What you will learn

Presenter: Waseem Ahmad, Mindfire Solutions

What is Swift?VariableConstants Type InferenceType AliasesString/Character InterpolationArray and DictionaryLoopsOptionals, Unwrapping an OptionalFunctionsTuplesClassesPropertiesClosuresQ & A

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

Variables

var variableName : String = “Swift”var version: Double = 1.0var day: Int = 28var isAnimated: Bool = true

Presenter: Waseem Ahmad, Mindfire Solutions

Constants & Variables

let variableName: String = “Swift”var version: Double = 1.0var day: Int = 28var 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

Constants & Variables

let variableName: String = “Swift”var version: Double = 1.0let day: Int = 28let isAnimated: Bool = true

Presenter: Waseem Ahmad, Mindfire Solutions

Type Inference

let variableName = “Swift” // As Stringvar version = 1.0 // As Double/Floatlet day = 28 // As Intlet isAnimated = true // As Boolean

Code safe, these are valuable & constant explicitly type.

Presenter: Waseem Ahmad, Mindfire Solutions

Type Aliases

An alternative name for an existing type.

typealias AudioSample = UInt16

var maxAmplitudeFound = AudioSample.min

Presenter: Waseem Ahmad, Mindfire Solutions

Unicode Names

let variableName = “Swift” // As Stringvar version = 1.0 // As Double/Floatlet day = 28 // As Intlet isAnimated = true // As Booleanlet π = 3.1415927let � = "emoji"�

Presenter: Waseem Ahmad, Mindfire Solutions

String

var studentName: String = “Waseem” var studentName = “Waseem” // Inferred to be of type string

Presenter: Waseem Ahmad, Mindfire Solutions

String

var studentName: String = “Waseem” var studentName = “Waseem” // Inferred to be of type string

var documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as StringdocumentsPath = documentsPath.stringByAppendingString(subpath)

Presenter: Waseem Ahmad, Mindfire Solutions

Character

let studentName = “Waseem"

for character in studentName { println(character)}

Waseem

Presenter: Waseem Ahmad, Mindfire Solutions

Complex String

var name = “Waseem”var coins = 100

Congratulations, Waseem won 100 coins.

Presenter: Waseem Ahmad, Mindfire Solutions

String Interpolation

var name = “Waseem”var coins = 100

Congratulations, Waseem won 100 coins.

let message = “Congratulations, \(name) won \(coins)”.

Presenter: Waseem Ahmad, Mindfire Solutions

String Mutability

var variableString = "Mindfire"

Presenter: Waseem Ahmad, Mindfire Solutions

String Mutability

var variableString = “Mindfire"variableString += " Solutions”

// variableString is now “Mindfire Solutions"

Presenter: Waseem Ahmad, Mindfire Solutions

String Mutability

var variableString = “Mindfire"variableString += " Solutions”

// variableString is now “Mindfire Solutions"

let constantString = “Mindfire"constantString += " Solutions”

// error - constantString cannot be changed

Presenter: Waseem Ahmad, Mindfire Solutions

String Mutability

var variableString = “Mindfire"variableString += " Solutions”

// variableString is now “Mindfire Solutions"

let constantString = “Mindfire"constantString += " Solutions”

// error - constantString cannot be changed

Presenter: Waseem Ahmad, Mindfire Solutions

Collection Type (Array & Dictionary)

Presenter: Waseem Ahmad, Mindfire Solutions

Array and Dictionary Literalsvar names = [“John”, “Bob”, "Brian", "Jack"]

Presenter: Waseem Ahmad, Mindfire Solutions

Array and Dictionary Literalsvar names = [“John”, “Bob”, "Brian", “Jack"]var numberOfLegs = ["ant": 6, "snake": 0, "cheetah": 4]

Presenter: Waseem Ahmad, Mindfire Solutions

Difference Between NSArray & NSDictionary- It could work with any type (String, Int etc)- Collection are typed collection

Presenter: Waseem Ahmad, Mindfire Solutions

Typed Collectionvar names = [“John”, “Bob”, "Brian", “Jack”, 123]var names = [“John”, “Bob”, "Brian", “Jack”, function()]

Presenter: Waseem Ahmad, Mindfire Solutions

Typed Collectionvar names: String[] = [“John”, “Bob”, "Brian", “Jack”]

Presenter: Waseem Ahmad, Mindfire Solutions

Typed Collectionvar 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

Loopwhile !isTrue { print(“hello”)}

for var i = 1; i <= 13; ++i { print(“hello”)}

Presenter: Waseem Ahmad, Mindfire Solutions

For-In: Strings and Characterslet studentName = “Waseem"

for character in studentName { println(character)}

Waseem

Swift Power, we can use character & emoji in similar way.

Presenter: Waseem Ahmad, Mindfire Solutions

For-In: Rangesfor number in 1...5 { // Clause Range println("\(number) times 4 is \(number * 4)")}

1 times 4 is 42 times 4 is 83 times 4 is 124 times 4 is 165 times 4 is 20

Presenter: Waseem Ahmad, Mindfire Solutions

For-In: Rangesfor number in 0..5 { // half clause range println("\(number) times 4 is \(number * 4)")}

0 times 4 is 01 times 4 is 42 times 4 is 83 times 4 is 124 times 4 is 16

Presenter: Waseem Ahmad, Mindfire Solutions

For-In: Arrayvar names = [“John”, “Bob”, "Brian", "Jack"]

for name in names { println("Hello \(name)")}

Presenter: Waseem Ahmad, Mindfire Solutions

For-In: Dictionarieslet 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

Modification in Arrayvar shoppingList = ["Eggs", "Milk"]println(shoppingList[0])

Presenter: Waseem Ahmad, Mindfire Solutions

Modification in Arrayvar shoppingList = ["Eggs", "Milk"]println(shoppingList[0])

shoppingList += "Flour"shoppingList += ["Cheese", "Butter", "Chocolate Spread"]

Presenter: Waseem Ahmad, Mindfire Solutions

Modification in Arrayvar shoppingList = ["Eggs", "Milk"]

shoppingList += "Flour"shoppingList += ["Cheese", "Butter", "Chocolate Spread”]shoppingList[0] = "Six eggs"

Presenter: Waseem Ahmad, Mindfire Solutions

Modification in Arrayvar shoppingList = ["Eggs", "Milk"]

shoppingList += "Flour"shoppingList += ["Cheese", "Butter", "Chocolate Spread”]shoppingList[0] = "Six eggs”

["Six eggs", "Milk", "Flour", "Cheese", "Butter","Chocolate Spread"]

shoppingList[3...5] = ["Bananas", “Apples"]

["Six eggs", "Milk", "Flour", "Bananas", “Apples"]

Presenter: Waseem Ahmad, Mindfire Solutions

Modification in Dictionaryvar numberOfLegs = ["ant": 6, "snake": 0, "cheetah": 4]

numberOfLegs["spider"] = 273

Presenter: Waseem Ahmad, Mindfire Solutions

Modification in Dictionaryvar 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

Optionalvar numberOfLegs = ["ant": 6, "snake": 0, "cheetah": 4]

let lionLegCount: Int? = numberOfLegs["lion"]

Presenter: Waseem Ahmad, Mindfire Solutions

Optionalvar 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

Optionalif numberOfLegs { let legCount = numberOfLegs! println("An Lion has \(legCount) legs")}

Presenter: Waseem Ahmad, Mindfire Solutions

Unwrapping an Optionalif let legCount = numberOfLegs { println("An Lion has \(legCount) legs")}

Note:- Braces are required with If :)

Presenter: Waseem Ahmad, Mindfire Solutions

Switchswitch legCount { case 0:

println("It slithers and slides around”)

case 1: println("It hops")

default: println("It walks")}

Presenter: Waseem Ahmad, Mindfire Solutions

Switchswitch 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

Switchswitch 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

Switchswitch 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”)

default: println("It walks")}

Presenter: Waseem Ahmad, Mindfire Solutions

Matching Value Rangesswitch 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

Functionsfunc sayHello() { println("Hello!")}

Presenter: Waseem Ahmad, Mindfire Solutions

Functions with Parametersfunc sayHello(name: String) { println("Hello \(name)!")}

Presenter: Waseem Ahmad, Mindfire Solutions

Default Parameter Valuesfunc sayHello(name: String = "World") { println("Hello \(name)!")}

sayHello() // Hello WorldsayHello(“Team”) // Hello Team

Presenter: Waseem Ahmad, Mindfire Solutions

Returning Valuesfunc greetingMsg(name: String = "World") -> String { return "Hello " + name}

let greeting = greetingMsg()

Presenter: Waseem Ahmad, Mindfire Solutions

Returning Multiple Valuesfunc getUsernInfo() -> (Int, String) { return (25, “John”)}

Presenter: Waseem Ahmad, Mindfire Solutions

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

Decomposing of Tuplesfunc getUsernInfo() -> (Int, String) { return (25, “John”)}

let (age, name) = getUsernInfo()

println(“This is \(name) and my age is \(age)")

Presenter: Waseem Ahmad, Mindfire Solutions

Decomposing of Tuplesfunc 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

Named Values in a Tuplefunc 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

Classesclass 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

Propertiesclass 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

Computed Propertiesclass 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

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

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

Initializer Class Syntaxclass Student { var rollNo = 1var 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 Inferencelet studentObj : Student = Student()

Presenter: Waseem Ahmad, Mindfire Solutions

Initializer Class Syntaxclass Student { var rollNo = 1

var name: String?

init() { // constructorstring = “Waseem”

}

var description: String { return “Hi this \(name!) and my roll number is \(rollNo)“}

}

Presenter: Waseem Ahmad, Mindfire Solutions

Overriding a Propertyclass Medical: Student { init() { super.init() } override var description: String { // Safe return super.description + ", student of Medical" }}

Presenter: Waseem Ahmad, Mindfire Solutions

Property Observersclass 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

Methodsclass Student { var rollNo = 1

var name: String?

func studentName(nameStr: String) { name = nameStr

}}

Presenter: Waseem Ahmad, Mindfire Solutions

Class Methodsclass func isFileExistAtPath(filePath: NSString) -> Bool {

let filemanager = NSFileManager.defaultManager()return filemanager.fileExistsAtPath(filePath)

}

Presenter: Waseem Ahmad, Mindfire Solutions

Class De-initialisationclass Student { var rollNo = 1

var name: String?

init() { // constructorfileOpen() //

}

deinit { // constructorcloseFile() //

}}

Presenter: Waseem Ahmad, Mindfire Solutions

iPhone App to Advertise Real Estate

Case Study

www.mindfiresolutions.com

Next Seminar: Swift in depthClosuresStructuresEnumExtensionsMemory ManagementOptional ChainingGeneric type

Presenter: Waseem Ahmad, Mindfire Solutions

References- Apple WWDC 2014- Apple Inc. “The Swift Programming Language.” iBooks.

Presenter: Waseem Ahmad, Mindfire Solutions

Presenter: Waseem Ahmad, Mindfire Solutions

Question and Answer

Thank you

Presenter: Waseem Ahmad, Mindfire Solutions