Upload
mike-jones
View
551
Download
0
Embed Size (px)
Citation preview
Modern & Expressive or Magical Unicorn?
Mike Jones - @FlashGen
Swift…
@flashgen | #reasonsto
A point of reference, of sorts…
@flashgen | #reasonsto
@flashgen | #reasonsto
var myNamevar = “Mike Jones”:String ;
@flashgen | #reasonsto
var myName = “Mike Jones”
@flashgen | #reasonsto
var myName:String = “Mike Jones”;
var myName = “Mike Jones”
@flashgen | #reasonsto
var myName = “Mike Jones”
let myName = “Mike Jones”
@flashgen | #reasonsto
Loops
Loops
for var i = 0; i < 10; i++{
println(i)}
Loops
for i in 0..<10{
println(i)}
Loops
var myArray = [1,2,3,4,5]
for item in myArray{
println(item)}
Loops
var i = 1
while i < 10{
println(i)i++
}
Loopsvar i = 10
do {
println(i)i++
}while i < 10
@flashgen | #reasonsto
Conditionals
If…elsevar num = 10
if num < 20{
println(“less than 20")}else{
println("not less than 20")}
Switch…Casevar value = 10
switch value{
case 10:println("Yay! just right")
case 20:println("a bit too high")
default:println("Nothing to see here")
}
Switch…Casevar value = 6
switch value{
case 1...9:println("Too low")
case 10:println("Yay! just right")
case 20:println("a bit too high")
default:println("Nothing to see here")
}
@flashgen | #reasonsto
Optionals…
@flashgen | #reasonsto
Optionals
var optionalInteger: Int?
var optionalInteger: Optional<Int>
Optionals
var impUnwrappedString:String!
var impUnwrappedString:ImplicitlyUnwrappedOptional<String>
Optionals
var myString = “hello”
var myInt = myString.toInt()
Optionals
var myString = “hello”
var myInt = myString.toInt()
// myInt = nil
Optionals
var myString = “3”
var myInt = myString.toInt()
Optionals
var myString = “3”
var myInt = myString.toInt()
// myInt = 3
Optionals
var myString = “3”
var myInt:Int = myString.toInt()
Optionals
var myString = “3”
var myInt:Int = myString.toInt()
// Object of type Optional is not unwrapped
Optionals
var myString = “3”
var myInt:Int = myString.toInt()!
Optionals
var myString = “3”
var myInt:Int = myString.toInt()!
// myInt = 3
Optionals
var myString = "hello"
var myInt:Int = myString.toInt()!.advancedBy(5)
Optionals
var myString = "hello"
var myInt:Int = myString.toInt()!.advancedBy(5)
// This fails
Optionalsvar myString = "5"
var myOtherInt:Int = 0;
if let myInt = myString.toInt()?.advancedBy(5){
myOtherInt = myInt;}else{
println("It's nil")}
@flashgen | #reasonsto
Functions & Closures
Functions
func myFunc(valA:Int, valB:Int) -> Int{
return valA + valB}
var myInt = myFunc(4, 4);
Functions
func myFunc(#valA:Int, #valB:Int) -> Int{
return valA + valB}
var myInt = myFunc(valA:4, valB:4);
Functions
func myFunc(myAge valA:Int, yourAge valB:Int) -> Int{
return valA + valB}
var ourAgesCombined = myFunc(myAge:4, yourAge:4);
Tuples
func sayHello(greeting:String, name:String) -> (String, String){
return (greeting + " " + name, “Pleased to meet you :)”)}
var mygreeting = sayHello("Hello", "Reasons");
mygreeting.0; // Hello Reasonsmygreeting.1; // Pleased to meet you :)
Tuples
func sayHello(greeting:String, name:String) -> (fullGreeting:String, response:String)
{return (greeting + " " + name, “Pleased to meet you :)”)
}
var mygreeting = sayHello("Hello", "Reasons");
mygreeting.fullGreeting; // Hello Reasonsmygreeting.response; // Pleased to meet you :)
Tuples
func sayHello(greeting:String, name:String) -> (String, String){
return (greeting + " " + name, "Pleased to meet you :)")}
let (fullGreeting, response) = sayHello("Hello", "Reasons");
fullGreeting; // Hello Reasonsresponse; // Pleased to meet you :)
Tuples
func sayHello(greeting:String, name:String) -> (String, String){
return (greeting + " " + name, "Pleased to meet you :)")}
let (fullGreeting, _) = sayHello("Hello", "Reasons");
fullGreeting; // Hello Reasons
Variadic Functionsfunc addNumbers(numbers:Int...) -> Int{
var total = 0;
for num in numbers{
total += num}
return total;}
addNumbers(1,2,3,4,5) // 15addNumbers(1,2,3) // 6
Function Types
func myFunc(valA:Int, valB:Int) -> Int{
return valA + valB}
var myIntFunc :(Int, Int) -> Int = myFunc
myIntFunc(4,4)
Closures
var namesArray = ["Mike", "Jason", "Dennis", "Darren", "John"];
func sortAlphabetically (s1:String, s2:String) -> Bool{
return s1 < s2;}
let myFriends = sorted(namesArray, sortAlphabetically)
Closures
var namesArray = ["Mike", "Darren", "Dennis", "Jason", "Macca"];
let myFriends = sorted(namesArray, { (s1:String, s2:String) -> Bool in
return s1 < s2;})
in…out
var month = 9var year = 2015
func swapTwoInts(inout a: Int, inout b: Int) {
let tempA = aa = bb = tempA
}
swapTwoInts(&month, &year) // month = 2015, year = 9
@flashgen | #reasonsto
Structs, Classes, Protocols & Extensions
@flashgen | #reasonsto
Structs
Structsstruct Person{
var firstName: String = "Mike";var lastName: String = "Jones";
}
let myPerson = Person()
Classesclass Person{
var firstName: String;var lastName: String;
init(fName:String, lName:String){firstName = fName;lastName = lName;}
}
let myPerson = Person(fName:"Mike", lName:"Jones")
Classesclass Person{
var firstName: String;var lastName: String;
init(fName:String="John", lName:String="Smith"){firstName = fName;lastName = lName;}
}
let myPerson = Person(fName:"Mike", lName:”Jones”)// fName = "Mike", lName = "Jones" let myDefaultPerson = Person() // fName = "John", lName = "Smith"
Classesclass Person{
var firstName: String;var lastName: String;
init(fName:String, lName:String){firstName = fName;lastName = lName;}
convenience init(){self.init(fName: "John", lName: "Smith");}
}
let myPerson = Person() // fName = "John", lName = "Smith"
Classesclass Person{
var firstName: String;var lastName: String;
init(fName:String, lName:String){firstName = fName;lastName = lName;}
deinit {
// Clean up here}
}
Classesclass Person{
var firstName: String;var lastName: String;
var fullName:String{get{
return self.firstName + " " + self.lastName}}
// …}
Inheritanceclass Employee: Person{ var jobDescription :String = "I'm a developer"; func whatAreYouDoing() -> String { return "I'm working." }}
Inheritancepublic class Manager: Employee{ override var jobDescription :String { get { return super.jobDescription } set(value) { super.jobDescription = value; } } override func whatAreYouDoing() -> String { return "Very little - I'm the boss!" }}
@flashgen | #reasonsto
Protocols
Protocols
protocol UnicornsProt{
var unicornHerd:Int? { get set }
func howManyUnicornsDoYouOwn() -> Int?}
Protocols
class Person: UnicornsProt{
var unicornHerd: Int?;
func howManyUnicornsDoYouOwn() -> Int? {
return unicornHerd;}
}
@flashgen | #reasonsto
Extensions
Extensions
extension Person{
public var unicorns:String { return "UNICORNS!" }
public func moreUnicorns() -> String{return “MORE " + unicorns;}
}
@flashgen | #reasonsto
Generics…
Generics
var myArray :Array<String>
var myDict :Dictionary<String, Person>
var myOptionalInt :Optional<Int>
Genericsfunc swapTwoInts(inout a: Int, inout b: Int){
let tempA = aa = bb = tempA
}
func swapTwoStrings(inout a: String, inout b: String){
let tempA = aa = bb = tempA
}
func swapTwoDoubles(inout a: Double, inout b: Double){
let tempA = aa = bb = tempA
}
Genericsvar month = 9var year = 2015
var greeting = "Hello Reasons"var response = "Pleased to meet you :)"
func swapTwoValues<T>(inout a: T, inout b: T){
let tempA = aa = bb = tempA
}
swapTwoValues(&month, &year)// month = 2015, year = 9
swapTwoValues(&greeting, &response)// greeting = "Pleased to meet you :)// response = "Hello Reasons
@flashgen | #reasonsto
one more thing…
@flashgen | #reasonsto
Swift 2.0
@flashgen | #reasonsto
Open Source
@flashgen | #reasonsto
Apple Developer Program http://developer.apple.com
@flashgen | #reasonsto
Thank You
Mike Jonespixadecimal.comblog.flashgen.com@FlashGen