Upload
the-software-house
View
1.486
Download
0
Embed Size (px)
Citation preview
Agenda
Zaszłości “historyczne” (Objective-C) Playground
Podstawowe konstrukcje Funkcje, closures, wyliczenia
Klasy, struktury, protokoły, metody Wbudowane kolekcje
danych
Kompatybilność z istniejącymi już bibliotekami i frameworkami
Frameworki napisane w Objective-C można wykorzystać również w Swift
źródło: https://github.com/Alamofire/Alamofire
Podsumowanie
Czytelne i przydatne konstrukcje
..Kompatybilność wsteczna”
Nowoczesne podejście - połączenie zalet języka dynamicznego i silnie typowanego
Funkcje i closures
func convertStringToNumber(#number:String, callback: (String->Int))->Int{ var result:Int = callback(number) return result} func convert(num:String)->Int{
return num.toInt()!}
var result = convertStringToNumber(number: "4", convert)
var result = convertStringToNumber(number: "4", {(num:String) in return num.toInt()!})
Funkcje i closures
var result = convertStringToNumber(number: "4"){ (num:String) in return num.toInt()!}
var result = convertStringToNumber(number: "4"){ num in num.toInt()!}
Wyliczenia
enum Number:Int{ case One = 1,Two,Three func description()->String{ switch(self) { case .One: return "one" case .Two: return "two" default: return String(self.rawValue) } }}let n = Number.Onen.description()
Struktury
Przykładowe struktury w Swift: Array, Set, Dictionary
struct Cat{ var avatar:UIImage?}
var cat = Cat(avatar: UIImage(named: "cat"))cat.avatar
Tablice i słowniki
var array:[String] = [String]()var numbers = Array<Int>()
array.append("Milk")numbers.append(14)
let constArray = [1,4,6,3]constArray.count
var dict:[Int:String] = [Int:String]()dict[4] = "Krowa"
dict[4]
var emptyDict = [:]
let constDict = [1 : "Krowa", 2 : "Mleko", 3 : "Milka", 4 : "Stek"]
Klasy
class Person:Details{ var firstName:String? var lastName:String? var age:Int? init(name:String, lastName:String, age:Int){ self.firstName = name self.lastName = lastName self.age = age } func displayDetails() { println("Człowiek nazywa się \(self.firstName) \(self.lastName) i ma \(self.age) lat.") } var fullName:String{ get{ return self.firstName! + " " + self.lastName! } }}
protocol Details{ func displayDetails()->Void}
Property observers
willSet - jest wywoływane przed zapisaniem wartości
didSet - jest wywoływane zaraz po tym jak nowa wartosć zostanie zapisana daje nam również dostęp do starej wartości!
Przydatne przy dziedziczeniu!
Property observers example
class StepCounter { var totalSteps: Int = 0 { willSet(newTotalSteps) { println("About to set totalSteps to \(newTotalSteps)") } didSet { if totalSteps > oldValue { println("Added \(totalSteps - oldValue) steps") } } } }