anyobject – 自分が見落としていた、基本の話

34

Upload: tomohiro-kumagai

Post on 16-Apr-2017

1.858 views

Category:

Software


0 download

TRANSCRIPT

Page 1: AnyObject – 自分が見落としていた、基本の話
Page 2: AnyObject – 自分が見落としていた、基本の話
Page 4: AnyObject – 自分が見落としていた、基本の話
Page 5: AnyObject – 自分が見落としていた、基本の話
Page 6: AnyObject – 自分が見落としていた、基本の話
Page 7: AnyObject – 自分が見落としていた、基本の話
Page 8: AnyObject – 自分が見落としていた、基本の話
Page 9: AnyObject – 自分が見落としていた、基本の話
Page 10: AnyObject – 自分が見落としていた、基本の話
Page 11: AnyObject – 自分が見落としていた、基本の話
Page 12: AnyObject – 自分が見落としていた、基本の話

switch instance {

case 0 as Double: print("0 of Double")

case let value as Int: print("\(value) of Int")

case is Double: print("Double")

}

Page 13: AnyObject – 自分が見落としていた、基本の話
Page 14: AnyObject – 自分が見落としていた、基本の話
Page 15: AnyObject – 自分が見落としていた、基本の話
Page 16: AnyObject – 自分が見落としていた、基本の話
Page 17: AnyObject – 自分が見落としていた、基本の話

let object = "Casual" as AnyObject

let count: Int? = object.length let _: Void? = object.append?("Swift")

Page 18: AnyObject – 自分が見落としていた、基本の話

// 通常通りに実行可能(メソッドは IUO 属性付き) let result: String = object.appending("Swift")

// 通常は、メソッドに応じられない場合は強制終了 let result: String = object.appending("Swift")

// メソッドに ? をつけて、ディスパッチ可能性も判定 let result: String? = object.appending?("Swift")

Page 19: AnyObject – 自分が見落としていた、基本の話

// 通常通りに実行可能、ただし戻り値は Optional 型 let count: Int? = object.length

Page 20: AnyObject – 自分が見落としていた、基本の話
Page 21: AnyObject – 自分が見落としていた、基本の話

class MyClass : NSObject {

func myFunction(_ v: Int) -> Int {…} }

let object = MyClass() as AnyObject let result: Int? = object.myFunction?(10)

Page 22: AnyObject – 自分が見落としていた、基本の話

class MyClass : NSObject {

func myFunction(_ v: Any) -> NSNumber {…} }

let object = MyClass() as NSObject let result: Unmanaged<AnyObject>? = object.perform(MyClass.myFunction(_:), with: 5) let resultValue: Int? = result?.takeRetainedValue().intValue

Page 23: AnyObject – 自分が見落としていた、基本の話

protocol MyClassProtocol : AnyObject { }

class MyClass : NSObject, MyClassProtocol { func myFunction(_ v: Int) -> Int {…} }

let object = MyClass() as MyClassProtocol let result: Int? = object.myFunction?(10)

Page 24: AnyObject – 自分が見落としていた、基本の話

class Object : NSObject { func method1() -> Int {…} @nonobjc func method2() -> Int {…} }

let object = Object() as AnyObject

let result1 = object.method1?() // .some(x) let result2 = object.method2?() // .none

Page 25: AnyObject – 自分が見落としていた、基本の話

// 原則、動的ディスパッチが可能 class Object : NSObject {

func method1() -> Int {…}

// 動的ディスパッチしたくないものに @nonobjc を付与 @nonobjc func method2() -> Int {…} }

Page 26: AnyObject – 自分が見落としていた、基本の話

// 原則、動的ディスパッチは不可 class Object {

func method1() -> Int {…}

// 動的ディスパッチしたいものに @objc を付与 @objc func method2() -> Int {…} }

Page 27: AnyObject – 自分が見落としていた、基本の話

@objc protocol Protocol {

func method() }

class Object : Protocol {

func method() {} }

Page 28: AnyObject – 自分が見落としていた、基本の話

class Object { @objc(otherName) func originalName() {} }

let object = Object() as AnyObject

object.originalName?() // .some(())

object.otherName?()

Page 29: AnyObject – 自分が見落としていた、基本の話

class OtherClass { @objc func otherName() {} } class Object { @objc(otherName) func originalName() {} } let object = Object() as AnyObject

object.originalName?() // .some(()) object.otherName?() // .some(())

Page 30: AnyObject – 自分が見落としていた、基本の話

class OtherClass { @objc func originalName() {} @objc func otherName() {} } class Object { @objc(otherName) func originalName() {} } let object = Object() as AnyObject

object.originalName?() // ambiguous use of … object.otherName?() // .some(())

Page 31: AnyObject – 自分が見落としていた、基本の話

class MyClass : NSObject {

func myFunction(_ v: Int) -> Int {…} }

let object = MyClass() as AnyObject let result: Int? = object.xxxx?(10)

Page 32: AnyObject – 自分が見落としていた、基本の話

func doSomething() {

class Object: NSObject {

// このシグネチャーは認識されない。動的実行は可 func someMethod() {} } }

Page 33: AnyObject – 自分が見落としていた、基本の話
Page 34: AnyObject – 自分が見落としていた、基本の話