Int) -> Int { var fib0 = 0, fib1 = 1 for var i = 2; i <= n; i++ { var tmp = fib0 fib0 = fib1 fib1 = tmp + fib1 } return n > 0 ? fib1 : 0 } Variable was never mutated; consider changing to ‘let’ constant
Int) -> Int { var fib0 = 0, fib1 = 1 for var i = 2; i <= n; i++ { let tmp = fib0 fib0 = fib1 fib1 = tmp + fib1 } return n > 0 ? fib1 : 0 } ++ is deprecated: it will be removed in Swift 3
Int) -> Int { var fib0 = 0, fib1 = 1 for var i = 2; i <= n; i += 1 { let tmp = fib0 fib0 = fib1 fib1 = tmp + fib1 } return n > 0 ? fib1 : 0 } C-Style for statement is deprecated and will be removed…
Int) -> Int { var fib0 = 0, fib1 = 1 for i in 2...n { let tmp = fib0 fib0 = fib1 fib1 = tmp + fib1 } return n > 0 ? fib1 : 0 } Immutable value ‘i’ was never used; consider replacing with ‘_’
VALUE TYPES ARE AWESOME ▸ Immutability ensured by ‘let’ ▸ No expensive boxing/unboxing ▸ Code is more thread-safe ▸ Performance is better ▸ Functional Programming is more convenient
{ case Forest case Mountain case Swamp case Plains case Island } enum Error : Int { case NotFound = 404 case ServerError = 500 case Forbidden = 403 case Teapot = 418 } Raw value can be String, Character or any numeric type
Cash case Check (Int) case CreditCard (CardType, Int) enum CardType { case Visa, MasterCard, Electron } func display() { switch self { case Cash: print("Paid by cash") case let Check(number): print("Paid by check #\(number)") case let CreditCard(type, number): print("Paid by \(type) #\(number)") } } } let method = PaymentMethod.CreditCard(.Visa, 995423) method.display()
case Success(T) case Error(U) } enum Optional<T> { case Some(T) case None } indirect enum Tree<T> { case Empty case Node(T, left: Tree<T>, right: Tree<T>) }
let answer: String = "42" let numericAnswer = Int(answer) let byOneThousand = numericAnswer * 1000 let nineThousand: Float = 9 * 1000 let vegetaSays: String = "It's over \(nineThousand) !!" let nappaSays: String = "What!? " + String(nineThousand) + "?!" VALUE OF OPTIONAL TYPE ‘INT?’ NOT UNWRAPPED; DID YOU MEAN TO USE ‘!’ OR ‘?’ ? Int?
types! ▸ Variables, constants, arguments, properties or return values ▸ You can’t use its value unless you unwrap it first ▸ If it is not Optional, it can never be nil
42 let answer: String = getAnswer() let numericAnswer: Int? = Int(answer) if let realAnswer: Int = numericAnswer { processNumericAnswer(realAnswer) } else { print("Please give a number") } nil Int? Int?
let answer: String = getAnswer() let numericAnswer: Int? = Int(answer) let sanitizedAnswer: Int = numericAnswer ?? 1 processNumericAnswer(sanitizedAnswer) let contact: Contact? = getContact() let email: String? = contact?.emailAddress ?? ?.
targetNames:[String] = people .filter({ contact in contact.lastName.hasPrefix("G") }) .map({ contact in contact.fullName }) .sort() func multipleOf(factor: Int) -> Int -> Bool { return { (number: Int) in number % factor == 0 } } let isEven = multipleOf(2) isEven(4) // Get the sum of multiples of 3 up to 100 (1...100) .filter(multipleOf(3)) .reduce(0, combine: +) https://github.com/mythz/swift-linq-examples