swift school #4
DESCRIPTION
Четвертая финальная встреча Swift SchoolTRANSCRIPT
![Page 1: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/1.jpg)
Swift Школа
Сергей Пронин, Александр Зимин Empatika
![Page 2: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/2.jpg)
План
• Swift - Перегрузка операторов
• iOS8 - App Groups
• iOS8 - Extensions
• iOS8 - Handoff
![Page 3: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/3.jpg)
Перегрузка операторов
![Page 4: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/4.jpg)
2 + 3
![Page 5: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/5.jpg)
<Модификатор> operator <операция> { <Свойства> }
![Page 6: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/6.jpg)
Модификаторы операцийinfix Модификатор инфикс операции Выполняется для двух объектов Пример: a + bprefix
Модификатор префиксов операции Выполняется для одного объекта Пример: !flag
postfix Модификатор постфиксной операции Выполняется для одного объекта Пример: i++
![Page 7: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/7.jpg)
Свойства операцийPrecedence (UInt8)
Приоритет операции Чем больше, тем приоритетнее Числа от 0 до 255 Базовое значение - 100Associativity
Ассоциативность операции Может быть left, right, none
Assignment Присвоение Используется для операций формата = Только для infix операций
![Page 8: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/8.jpg)
Приоритет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
![Page 9: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/9.jpg)
Ассоциативность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
![Page 10: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/10.jpg)
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
![Page 11: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/11.jpg)
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
![Page 12: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/12.jpg)
Перегрузка операторов для классов
![Page 13: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/13.jpg)
struct Vector2D { var x = 0.0, y = 0.0 }
![Page 14: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/14.jpg)
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}
![Page 15: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/15.jpg)
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
![Page 16: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/16.jpg)
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}
![Page 17: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/17.jpg)
infix operator ^^ {} func ^^ (left: Double, right: Double) -> Double { return pow(left, right) }
5 ^^ 2 // 25.0 3 ^^ 5 // 243.0
![Page 18: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/18.jpg)
Extensions
![Page 19: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/19.jpg)
![Page 20: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/20.jpg)
App extension
Host appContaining app
Request
Response
![Page 21: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/21.jpg)
App extension
Host app
Containing app
Request
Response
Open URL
Shared resources
Read/Write
Read/Write
![Page 22: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/22.jpg)
Today Widget
![Page 23: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/23.jpg)
![Page 24: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/24.jpg)
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) } }
![Page 25: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/25.jpg)
App Groups
![Page 26: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/26.jpg)
![Page 27: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/27.jpg)
![Page 28: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/28.jpg)
Handoff Continuity
![Page 29: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/29.jpg)
![Page 30: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/30.jpg)
![Page 31: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/31.jpg)
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! }
![Page 32: Swift School #4](https://reader034.vdocument.in/reader034/viewer/2022051612/54c416364a795955788b47dc/html5/thumbnails/32.jpg)
// 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 }