swift school #4

33
Swift Школа Сергей Пронин, Александр Зимин Empatika

Upload: sergey-pronin

Post on 25-Jan-2015

145 views

Category:

Education


4 download

DESCRIPTION

Четвертая финальная встреча Swift School

TRANSCRIPT

Page 1: Swift School #4

Swift Школа

Сергей Пронин, Александр Зимин Empatika

Page 2: Swift School #4

План

• Swift - Перегрузка операторов

• iOS8 - App Groups

• iOS8 - Extensions

• iOS8 - Handoff

Page 3: Swift School #4

Перегрузка операторов

Page 4: Swift School #4

2 + 3

Page 5: Swift School #4

<Модификатор> operator <операция> { <Свойства> }

Page 6: Swift School #4

Модификаторы операцийinfix Модификатор инфикс операции Выполняется для двух объектов Пример: a + bprefix

Модификатор префиксов операции Выполняется для одного объекта Пример: !flag

postfix Модификатор постфиксной операции Выполняется для одного объекта Пример: i++

Page 7: Swift School #4

Свойства операцийPrecedence (UInt8)

Приоритет операции Чем больше, тем приоритетнее Числа от 0 до 255 Базовое значение - 100Associativity

Ассоциативность операции Может быть left, right, none

Assignment Присвоение Используется для операций формата = Только для infix операций

Page 8: Swift School #4

Приоритет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

Ассоциативность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

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

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

Перегрузка операторов для классов

Page 13: Swift School #4

struct Vector2D { var x = 0.0, y = 0.0 }

Page 14: Swift School #4

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

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

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

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

Extensions

Page 19: Swift School #4
Page 20: Swift School #4

App extension

Host appContaining app

Request

Response

Page 21: Swift School #4

App extension

Host app

Containing app

Request

Response

Open URL

Shared resources

Read/Write

Read/Write

Page 22: Swift School #4

Today Widget

Page 23: Swift School #4
Page 24: 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) } }

Page 25: Swift School #4

App Groups

Page 26: Swift School #4
Page 27: Swift School #4
Page 28: Swift School #4

Handoff Continuity

Page 29: Swift School #4
Page 30: Swift School #4
Page 31: 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! }

Page 32: Swift School #4

// 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 }

Page 33: Swift School #4

Вопросы

[email protected]

Дипломы