SlideShare a Scribd company logo
1 of 33
Download to read offline
Swift Школа 
Сергей Пронин, Александр Зимин 
Empatika
План 
• Swift - Перегрузка операторов 
• iOS8 - App Groups 
• iOS8 - Extensions 
• iOS8 - Handoff
Перегрузка операторов
2 + 3
<Модификатор> operator <операция> { 
<Свойства> 
}
Модификаторы операций 
infix 
Модификатор инфикс операции 
Выполняется для двух объектов 
Пример: a + b 
prefix 
Модификатор префиксов операции 
Выполняется для одного объекта 
Пример: !flag 
postfix 
Модификатор постфиксной операции 
Выполняется для одного объекта 
Пример: i++
Свойства операций 
Precedence (UInt8) 
Приоритет операции 
Чем больше, тем приоритетнее 
Числа от 0 до 255 
Базовое значение - 100 
Associativity 
Ассоциативность операции 
Может быть left, right, none 
Assignment 
Присвоение 
Используется для операций формата = 
Только для infix операций
Приоритет 
infix operator >+ { 
precedence 40 
} 
func >+ (left: Double, right: Double) -> Double { 
return left + right 
} 
infix operator >* { 
precedence 30 
} 
func >* (left: Double, right: Double) -> Double { 
return left * right 
} 
let value = 10 >+ 5 >* 2 // 30
Ассоциативность 
infix operator >- { 
associativity left 
} 
func >- (left: Double, right: Double) -> Double { 
return left - right 
} 
infix operator >/ { 
associativity left 
} 
func >/ (left: Double, right: Double) -> Double { 
return left / right 
} 
let nValue = 10 >- 4 >/ 2 // 3 
let anotherValue = 10 >/ 2 >- 4 // 1
infix operator **= { 
precedence 120 
assignment 
} 
func **= (inout left: Double, right: Double) -> Double { 
left = left * right 
return left 
} 
infix operator ** { 
associativity left 
} 
func ** (left: Double, right: Double) -> Double { 
return left * right 
} 
infix operator +++ { 
associativity left 
} 
func +++ (left: Double, right: Double) -> Double { 
return left + right 
} 
var x = 3 +++ 4 ** 5 
let y = x **= 2 ** 4 
y 
x
infix operator **= { 
precedence 120 
assignment 
} 
func **= (inout left: Double, right: Double) -> Double { 
left = left * right 
return left 
} 
infix operator ** { 
associativity left 
} 
func ** (left: Double, right: Double) -> Double { 
return left * right 
} 
infix operator +++ { 
associativity left 
} 
func +++ (left: Double, right: Double) -> Double { 
return left + right 
} 
var x = 3 +++ 4 ** 5 // 35.0 
let y = x **= 2 ** 4 
y // 280.0 
x // 70
Перегрузка операторов для классов
struct Vector2D { 
var x = 0.0, y = 0.0 
}
func + (left: Vector2D, right: Vector2D) -> Vector2D { 
return Vector2D(x: left.x + right.x, y: left.y + right.y) 
} 
let vectorSum1 = Vector2D(x: 1.0, y: 2.0) 
let vectorSum2 = Vector2D(x: 0.5, y: -1.0) 
let vectorSum3 = vectorSum1 + vectorSum2 // {x 1.5, t 1.0}
prefix func -(vector: Vector2D) -> Vector2D { 
return Vector2D(x: -vector.x, y: -vector.y) 
} 
prefix func +(vector: Vector2D) -> Double { 
return vector.x + vector.y 
} 
let minusVector = -vectorSum3 // {x -1.5, y -1.0} 
let result = +vectorSum3 // 2.5
func += (inout left: Vector2D, right: Vector2D) { 
left = left + right 
} 
var newVector = Vector2D(x: 1.0, y: 1.0) // {x 1.0, y 1.0} 
newVector += Vector2D(x: 1.0, y: 2.0) // {x 2.0, y 3.0} 
postfix func ++ (inout vector: Vector2D) -> Vector2D { 
vector += Vector2D(x: 1.0, y: 1.0) 
return vector 
} 
newVector++ // {x 3.0, y 4.0} 
let updatedNewVector = newVector++ // {x 4.0, y 5.0}
infix operator ^^ {} 
func ^^ (left: Double, right: Double) -> Double { 
return pow(left, right) 
} 
5 ^^ 2 // 25.0 
3 ^^ 5 // 243.0
Extensions
App 
extension 
Containing Host app 
app 
Request 
Response
App 
extension 
Host app 
Containing 
app 
Request 
Response 
Open URL 
Read/Write 
Shared 
resources 
Read/Write
Today Widget
import NotificationCenter 
class TodayViewController: UIViewController, NCWidgetProviding { 
override func viewDidLoad() { 
super.viewDidLoad() 
self.preferredContentSize = CGSizeMake(320, 100) 
} 
//MARK: - NCWidgetProviding 
func widgetPerformUpdateWithCompletionHandler(completionHandler: 
(NCUpdateResult -> Void)!) { 
// update widget and call handler: .Failed, .NoData, .NewData 
completionHandler(NCUpdateResult.NewData) 
} 
func widgetMarginInsetsForProposedMarginInsets( 
defaultMarginInsets: UIEdgeInsets) -> UIEdgeInsets { 
return UIEdgeInsetsMake(8, 16, 8, 16) 
} 
}
App Groups
Handoff 
Continuity
func broadcastActivity() { 
var activity = NSUserActivity(activityType: "com.empatika.activity1") 
activity.addUserInfoEntriesFromDictionary([ 
"flight_id": self.currentFlight.flightId 
]) 
activity.title = self.currentFlight.name 
activity.delegate = self 
activity.setNeedsSave(true) 
activity.becomeCurrent() 
} 
// implement NSUserActivityDelegate 
func userActivityWillSave(activity: NSUserActivity) { 
activity.addUserInfoEntriesFromDictionary([ 
"flight_id": self.currentFlight.flightId 
]) 
} 
func userActivityWasContinued(activity: NSUserActivity) { 
//another device picker up the activity! 
}
// AppDelegate 
func application(application: UIApplication, 
continueUserActivity userActivity: NSUserActivity, 
restorationHandler: [AnyObject] -> Void) -> Bool { 
var flightIdOpt = userActivity.userInfo[“flight_id"] 
as? String 
if let flightId = flightIdOpt { 
//load flight locally or remotely and show 
} 
//optional. if restoration is set up 
restorationHandler(self.viewControllers) 
return true //or false if can’t 
}
Вопросы 
swift@empatika.com 
Дипломы

More Related Content

What's hot

Профилирование и отладка Django
Профилирование и отладка DjangoПрофилирование и отладка Django
Профилирование и отладка DjangoVladimir Rudnyh
 
Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в DjangoMoscowDjango
 
Erlang data operation caveats
Erlang data operation caveatsErlang data operation caveats
Erlang data operation caveatsIlya Averyanov
 
2.4 Использование указателей
2.4 Использование указателей2.4 Использование указателей
2.4 Использование указателейDEVTYPE
 
Pyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPython Meetup
 
I tmozg js_school_jquery
I tmozg js_school_jqueryI tmozg js_school_jquery
I tmozg js_school_jqueryITmozg
 
DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6Dmitry Soshnikov
 
ORO Meetups - Doctrine Events
ORO Meetups - Doctrine EventsORO Meetups - Doctrine Events
ORO Meetups - Doctrine Eventssergeyz
 
Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Sergey Schetinin
 
Огранизация ввода и вывода данных
Огранизация ввода и вывода данныхОгранизация ввода и вывода данных
Огранизация ввода и вывода данныхAndrey Dolinin
 
Красота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonКрасота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonPython Meetup
 
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжениеШкола-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжениеГлеб Тарасов
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Vasya Petrov
 
Sergii Tsypanov "Performance 1001 Tips"
Sergii Tsypanov "Performance 1001 Tips"Sergii Tsypanov "Performance 1001 Tips"
Sergii Tsypanov "Performance 1001 Tips"LogeekNightUkraine
 
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Python Meetup
 

What's hot (20)

Профилирование и отладка Django
Профилирование и отладка DjangoПрофилирование и отладка Django
Профилирование и отладка Django
 
Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в Django
 
Erlang data operation caveats
Erlang data operation caveatsErlang data operation caveats
Erlang data operation caveats
 
2.4 Использование указателей
2.4 Использование указателей2.4 Использование указателей
2.4 Использование указателей
 
Scala #3
Scala #3Scala #3
Scala #3
 
Pyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPyton – пробуем функциональный стиль
Pyton – пробуем функциональный стиль
 
I tmozg js_school_jquery
I tmozg js_school_jqueryI tmozg js_school_jquery
I tmozg js_school_jquery
 
DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6
 
ORO Meetups - Doctrine Events
ORO Meetups - Doctrine EventsORO Meetups - Doctrine Events
ORO Meetups - Doctrine Events
 
Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование
 
Огранизация ввода и вывода данных
Огранизация ввода и вывода данныхОгранизация ввода и вывода данных
Огранизация ввода и вывода данных
 
Красота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonКрасота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки Python
 
Импорт данных в django
Импорт данных в djangoИмпорт данных в django
Импорт данных в django
 
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжениеШкола-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
 
Decorators' recipes
Decorators' recipesDecorators' recipes
Decorators' recipes
 
Erlang tasty & useful stuff
Erlang tasty & useful stuffErlang tasty & useful stuff
Erlang tasty & useful stuff
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
Sergii Tsypanov "Performance 1001 Tips"
Sergii Tsypanov "Performance 1001 Tips"Sergii Tsypanov "Performance 1001 Tips"
Sergii Tsypanov "Performance 1001 Tips"
 
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
 
Функциональное программирование.Списки. Функции высших порядков
Функциональное программирование.Списки. Функции высших порядковФункциональное программирование.Списки. Функции высших порядков
Функциональное программирование.Списки. Функции высших порядков
 

Viewers also liked

Департамент Программной Инженерии
Департамент Программной ИнженерииДепартамент Программной Инженерии
Департамент Программной ИнженерииSergey Pronin
 

Viewers also liked (8)

Swift School #1
Swift School #1Swift School #1
Swift School #1
 
Squeek School #8
Squeek School #8Squeek School #8
Squeek School #8
 
Squeek School #5
Squeek School #5Squeek School #5
Squeek School #5
 
Squeek school 4
Squeek school 4Squeek school 4
Squeek school 4
 
Squeek school #6
Squeek school #6Squeek school #6
Squeek school #6
 
Squeek School #7
Squeek School #7Squeek School #7
Squeek School #7
 
Департамент Программной Инженерии
Департамент Программной ИнженерииДепартамент Программной Инженерии
Департамент Программной Инженерии
 
PTA Ancillaries
PTA AncillariesPTA Ancillaries
PTA Ancillaries
 

Similar to Swift School #4

5.1 Перегрузка операторов
5.1 Перегрузка операторов5.1 Перегрузка операторов
5.1 Перегрузка операторовDEVTYPE
 
Антон Веретенников и Илья Семаков. Презентация
Антон Веретенников и Илья Семаков. ПрезентацияАнтон Веретенников и Илья Семаков. Презентация
Антон Веретенников и Илья Семаков. ПрезентацияDaria Oreshkina
 
Антон Полухин, Немного о Boost
Антон Полухин, Немного о BoostАнтон Полухин, Немного о Boost
Антон Полухин, Немного о BoostSergey Platonov
 
функции в Java script
функции в Java scriptфункции в Java script
функции в Java scriptViktor Andreev
 
FPUG Dzyga presentation
FPUG Dzyga presentationFPUG Dzyga presentation
FPUG Dzyga presentationIvan Filimonov
 
Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"
Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"
Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"Fwdays
 
Лекция 8. Итераторы, генераторы и модуль itertools.
 Лекция 8. Итераторы, генераторы и модуль itertools. Лекция 8. Итераторы, генераторы и модуль itertools.
Лекция 8. Итераторы, генераторы и модуль itertools.Roman Brovko
 
Andrew Borisenko "Magic of Vue.js""
Andrew Borisenko  "Magic of Vue.js""Andrew Borisenko  "Magic of Vue.js""
Andrew Borisenko "Magic of Vue.js""OdessaJS Conf
 
DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2Alexander Makarov
 
Статический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий ЛевановСтатический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий ЛевановYandex
 
Разработка расширяемых приложений на Django
Разработка расширяемых приложений на DjangoРазработка расширяемых приложений на Django
Разработка расширяемых приложений на DjangoMoscowDjango
 
YiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииYiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииPaul Klimov
 
Yii: миграции и инсталляции
Yii: миграции и инсталляцииYii: миграции и инсталляции
Yii: миграции и инсталляцииPaul Klimov
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Vasya Petrov
 
8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)Smolensk Computer Science Club
 

Similar to Swift School #4 (20)

5.1 Перегрузка операторов
5.1 Перегрузка операторов5.1 Перегрузка операторов
5.1 Перегрузка операторов
 
Антон Веретенников и Илья Семаков. Презентация
Антон Веретенников и Илья Семаков. ПрезентацияАнтон Веретенников и Илья Семаков. Презентация
Антон Веретенников и Илья Семаков. Презентация
 
Антон Полухин, Немного о Boost
Антон Полухин, Немного о BoostАнтон Полухин, Немного о Boost
Антон Полухин, Немного о Boost
 
Основы Python. Функции
Основы Python. ФункцииОсновы Python. Функции
Основы Python. Функции
 
функции в Java script
функции в Java scriptфункции в Java script
функции в Java script
 
FPUG Dzyga presentation
FPUG Dzyga presentationFPUG Dzyga presentation
FPUG Dzyga presentation
 
Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"
Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"
Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"
 
Урок 3. Карринг и ленивые вычисления.
Урок 3. Карринг и ленивые вычисления.Урок 3. Карринг и ленивые вычисления.
Урок 3. Карринг и ленивые вычисления.
 
Лекция 8. Итераторы, генераторы и модуль itertools.
 Лекция 8. Итераторы, генераторы и модуль itertools. Лекция 8. Итераторы, генераторы и модуль itertools.
Лекция 8. Итераторы, генераторы и модуль itertools.
 
South migration
South migrationSouth migration
South migration
 
Andrew Borisenko "Magic of Vue.js""
Andrew Borisenko  "Magic of Vue.js""Andrew Borisenko  "Magic of Vue.js""
Andrew Borisenko "Magic of Vue.js""
 
DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2
 
Статический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий ЛевановСтатический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий Леванов
 
Разработка расширяемых приложений на Django
Разработка расширяемых приложений на DjangoРазработка расширяемых приложений на Django
Разработка расширяемых приложений на Django
 
YiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииYiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляции
 
Yii: миграции и инсталляции
Yii: миграции и инсталляцииYii: миграции и инсталляции
Yii: миграции и инсталляции
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)
 
Charming python sc2-8
Charming python sc2-8Charming python sc2-8
Charming python sc2-8
 
лекция 3
лекция 3лекция 3
лекция 3
 

More from Sergey Pronin

App in the Air Internship 2018
App in the Air Internship 2018App in the Air Internship 2018
App in the Air Internship 2018Sergey Pronin
 
Things you might have missed from CoreData
Things you might have missed from CoreDataThings you might have missed from CoreData
Things you might have missed from CoreDataSergey Pronin
 
Mera Dev Fest - Swift vs. Obj-C
Mera Dev Fest - Swift vs. Obj-CMera Dev Fest - Swift vs. Obj-C
Mera Dev Fest - Swift vs. Obj-CSergey Pronin
 
Empatika Design Hours
Empatika Design HoursEmpatika Design Hours
Empatika Design HoursSergey Pronin
 
Greenfield Feedback Squeek
Greenfield Feedback SqueekGreenfield Feedback Squeek
Greenfield Feedback SqueekSergey Pronin
 

More from Sergey Pronin (8)

App in the Air Internship 2018
App in the Air Internship 2018App in the Air Internship 2018
App in the Air Internship 2018
 
Things you might have missed from CoreData
Things you might have missed from CoreDataThings you might have missed from CoreData
Things you might have missed from CoreData
 
Mera Dev Fest - Swift vs. Obj-C
Mera Dev Fest - Swift vs. Obj-CMera Dev Fest - Swift vs. Obj-C
Mera Dev Fest - Swift vs. Obj-C
 
Swift School #3
Swift School #3Swift School #3
Swift School #3
 
Swift School #2
Swift School #2Swift School #2
Swift School #2
 
Empatika Design Hours
Empatika Design HoursEmpatika Design Hours
Empatika Design Hours
 
Greenfield Feedback Squeek
Greenfield Feedback SqueekGreenfield Feedback Squeek
Greenfield Feedback Squeek
 
Squeek School #3
Squeek School #3Squeek School #3
Squeek School #3
 

Swift School #4

  • 1. Swift Школа Сергей Пронин, Александр Зимин Empatika
  • 2. План • Swift - Перегрузка операторов • iOS8 - App Groups • iOS8 - Extensions • iOS8 - Handoff
  • 6. Модификаторы операций infix Модификатор инфикс операции Выполняется для двух объектов Пример: a + b prefix Модификатор префиксов операции Выполняется для одного объекта Пример: !flag postfix Модификатор постфиксной операции Выполняется для одного объекта Пример: i++
  • 7. Свойства операций Precedence (UInt8) Приоритет операции Чем больше, тем приоритетнее Числа от 0 до 255 Базовое значение - 100 Associativity Ассоциативность операции Может быть left, right, none Assignment Присвоение Используется для операций формата = Только для infix операций
  • 8. Приоритет infix operator >+ { precedence 40 } func >+ (left: Double, right: Double) -> Double { return left + right } infix operator >* { precedence 30 } func >* (left: Double, right: Double) -> Double { return left * right } let value = 10 >+ 5 >* 2 // 30
  • 9. Ассоциативность infix operator >- { associativity left } func >- (left: Double, right: Double) -> Double { return left - right } infix operator >/ { associativity left } func >/ (left: Double, right: Double) -> Double { return left / right } let nValue = 10 >- 4 >/ 2 // 3 let anotherValue = 10 >/ 2 >- 4 // 1
  • 10. infix operator **= { precedence 120 assignment } func **= (inout left: Double, right: Double) -> Double { left = left * right return left } infix operator ** { associativity left } func ** (left: Double, right: Double) -> Double { return left * right } infix operator +++ { associativity left } func +++ (left: Double, right: Double) -> Double { return left + right } var x = 3 +++ 4 ** 5 let y = x **= 2 ** 4 y x
  • 11. infix operator **= { precedence 120 assignment } func **= (inout left: Double, right: Double) -> Double { left = left * right return left } infix operator ** { associativity left } func ** (left: Double, right: Double) -> Double { return left * right } infix operator +++ { associativity left } func +++ (left: Double, right: Double) -> Double { return left + right } var x = 3 +++ 4 ** 5 // 35.0 let y = x **= 2 ** 4 y // 280.0 x // 70
  • 13. struct Vector2D { var x = 0.0, y = 0.0 }
  • 14. func + (left: Vector2D, right: Vector2D) -> Vector2D { return Vector2D(x: left.x + right.x, y: left.y + right.y) } let vectorSum1 = Vector2D(x: 1.0, y: 2.0) let vectorSum2 = Vector2D(x: 0.5, y: -1.0) let vectorSum3 = vectorSum1 + vectorSum2 // {x 1.5, t 1.0}
  • 15. prefix func -(vector: Vector2D) -> Vector2D { return Vector2D(x: -vector.x, y: -vector.y) } prefix func +(vector: Vector2D) -> Double { return vector.x + vector.y } let minusVector = -vectorSum3 // {x -1.5, y -1.0} let result = +vectorSum3 // 2.5
  • 16. func += (inout left: Vector2D, right: Vector2D) { left = left + right } var newVector = Vector2D(x: 1.0, y: 1.0) // {x 1.0, y 1.0} newVector += Vector2D(x: 1.0, y: 2.0) // {x 2.0, y 3.0} postfix func ++ (inout vector: Vector2D) -> Vector2D { vector += Vector2D(x: 1.0, y: 1.0) return vector } newVector++ // {x 3.0, y 4.0} let updatedNewVector = newVector++ // {x 4.0, y 5.0}
  • 17. infix operator ^^ {} func ^^ (left: Double, right: Double) -> Double { return pow(left, right) } 5 ^^ 2 // 25.0 3 ^^ 5 // 243.0
  • 19.
  • 20. App extension Containing Host app app Request Response
  • 21. App extension Host app Containing app Request Response Open URL Read/Write Shared resources Read/Write
  • 23.
  • 24. import NotificationCenter class TodayViewController: UIViewController, NCWidgetProviding { override func viewDidLoad() { super.viewDidLoad() self.preferredContentSize = CGSizeMake(320, 100) } //MARK: - NCWidgetProviding func widgetPerformUpdateWithCompletionHandler(completionHandler: (NCUpdateResult -> Void)!) { // update widget and call handler: .Failed, .NoData, .NewData completionHandler(NCUpdateResult.NewData) } func widgetMarginInsetsForProposedMarginInsets( defaultMarginInsets: UIEdgeInsets) -> UIEdgeInsets { return UIEdgeInsetsMake(8, 16, 8, 16) } }
  • 26.
  • 27.
  • 29.
  • 30.
  • 31. func broadcastActivity() { var activity = NSUserActivity(activityType: "com.empatika.activity1") activity.addUserInfoEntriesFromDictionary([ "flight_id": self.currentFlight.flightId ]) activity.title = self.currentFlight.name activity.delegate = self activity.setNeedsSave(true) activity.becomeCurrent() } // implement NSUserActivityDelegate func userActivityWillSave(activity: NSUserActivity) { activity.addUserInfoEntriesFromDictionary([ "flight_id": self.currentFlight.flightId ]) } func userActivityWasContinued(activity: NSUserActivity) { //another device picker up the activity! }
  • 32. // AppDelegate func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: [AnyObject] -> Void) -> Bool { var flightIdOpt = userActivity.userInfo[“flight_id"] as? String if let flightId = flightIdOpt { //load flight locally or remotely and show } //optional. if restoration is set up restorationHandler(self.viewControllers) return true //or false if can’t }