SlideShare a Scribd company logo
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
Swift School #4
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
Swift School #4
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
Swift School #4
Swift School #4
Handoff 
Continuity
Swift School #4
Swift School #4
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

PDF
Cocoheads Moscow September
PDF
Vuejs composition API
PDF
Боремся со сложностью по-функциональному
PPT
лекция 3
PPTX
Yii 2. Что нового?
PDF
YiiConf 2012 - Alexander Makarov - Yii2, что нового
PDF
Недостатки Python
PDF
Монады для барабанщиков. Антон Холомьёв
Cocoheads Moscow September
Vuejs composition API
Боремся со сложностью по-функциональному
лекция 3
Yii 2. Что нового?
YiiConf 2012 - Alexander Makarov - Yii2, что нового
Недостатки Python
Монады для барабанщиков. Антон Холомьёв

What's hot (20)

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

Viewers also liked (8)

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

Similar to Swift School #4 (20)

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

More from Sergey Pronin (8)

PDF
App in the Air Internship 2018
PDF
Things you might have missed from CoreData
PDF
Mera Dev Fest - Swift vs. Obj-C
PDF
Swift School #3
PDF
Swift School #2
PDF
Empatika Design Hours
PDF
Greenfield Feedback Squeek
KEY
Squeek School #3
App in the Air Internship 2018
Things you might have missed from CoreData
Mera Dev Fest - Swift vs. Obj-C
Swift School #3
Swift School #2
Empatika Design Hours
Greenfield Feedback Squeek
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
  • 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
  • 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) } }
  • 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 }