ݺߣ

ݺߣShare 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

What's hot (20)

PDF
Профилирование и отладка Django
Vladimir Rudnyh
PPT
Производительность в Django
MoscowDjango
PPTX
Erlang data operation caveats
Ilya Averyanov
PDF
2.4 Использование указателей
DEVTYPE
PDF
Pyton – пробуем функциональный стиль
Python Meetup
PPTX
I tmozg js_school_jquery
ITmozg
PDF
DevConf. Дмитрий Сошников - ECMAScript 6
Dmitry Soshnikov
PDF
ORO Meetups - Doctrine Events
sergeyz
PPT
Декораторы в Python и их практическое использование
Sergey Schetinin
PPT
Огранизация ввода и вывода данных
Andrey Dolinin
PDF
Красота и изящность стандартной библиотеки Python
Python Meetup
PPTX
Импорт данных в django
Павел Тявин
PDF
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Глеб Тарасов
PDF
Decorators' recipes
Yury Yurevich
PDF
Erlang tasty & useful stuff
Dmitry Demeshchuk
PPT
Подробная презентация JavaScript 6 в 1
Vasya Petrov
PDF
Sergii Tsypanov "Performance 1001 Tips"
LogeekNightUkraine
PPT
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Python Meetup
PPTX
Функциональное программирование.Списки. Функции высших порядков
Система дистанционного обучения MyDLS
Профилирование и отладка Django
Vladimir Rudnyh
Производительность в Django
MoscowDjango
Erlang data operation caveats
Ilya Averyanov
2.4 Использование указателей
DEVTYPE
Pyton – пробуем функциональный стиль
Python Meetup
I tmozg js_school_jquery
ITmozg
DevConf. Дмитрий Сошников - ECMAScript 6
Dmitry Soshnikov
ORO Meetups - Doctrine Events
sergeyz
Декораторы в Python и их практическое использование
Sergey Schetinin
Огранизация ввода и вывода данных
Andrey Dolinin
Красота и изящность стандартной библиотеки Python
Python Meetup
Импорт данных в django
Павел Тявин
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Глеб Тарасов
Decorators' recipes
Yury Yurevich
Erlang tasty & useful stuff
Dmitry Demeshchuk
Подробная презентация JavaScript 6 в 1
Vasya Petrov
Sergii Tsypanov "Performance 1001 Tips"
LogeekNightUkraine
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Python Meetup
Функциональное программирование.Списки. Функции высших порядков
Система дистанционного обучения MyDLS

Viewers also liked (8)

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

More from Sergey Pronin (8)

PDF
App in the Air Internship 2018
Sergey Pronin
PDF
Things you might have missed from CoreData
Sergey Pronin
PDF
Mera Dev Fest - Swift vs. Obj-C
Sergey Pronin
PDF
Swift School #3
Sergey Pronin
PDF
Swift School #2
Sergey Pronin
PDF
Empatika Design Hours
Sergey Pronin
PDF
Greenfield Feedback Squeek
Sergey Pronin
KEY
Squeek School #3
Sergey Pronin
App in the Air Internship 2018
Sergey Pronin
Things you might have missed from CoreData
Sergey Pronin
Mera Dev Fest - Swift vs. Obj-C
Sergey Pronin
Swift School #3
Sergey Pronin
Swift School #2
Sergey Pronin
Empatika Design Hours
Sergey Pronin
Greenfield Feedback Squeek
Sergey Pronin
Squeek School #3
Sergey Pronin
Ad

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 }