Top Banner
/* 2016.07.09 @ 第68回 Cocoa 勉強会関西 */
79

WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

Apr 14, 2017

Download

Software

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

/* 2016.07.09 @ 第68回 Cocoa 勉強会関西 */

Page 2: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

/**

*/

/* @es_kumagai */

Page 3: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

/**

*/

Page 4: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

@niwatako

Page 5: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 6: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

/* 2016/06/13 2016/06/17 */

Page 7: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 8: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 9: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 10: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 11: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 12: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 13: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 14: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 15: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 16: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 17: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 18: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 19: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 20: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 21: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 22: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 23: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 24: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 25: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 26: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 27: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 28: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 29: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 30: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 31: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

/* 2016/06/13 2016/06/17 */

Page 32: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 33: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 34: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 35: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 36: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 37: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 38: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 39: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 40: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

// 最初のインデックス var startIndex: Index { get }

// 最後の次のインデックス var endIndex: Index { get }

// 指定したインデックスに該当する要素 subscript (position: Index) -> _Element { get }

Page 41: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

// 最初のインデックス var startIndex: Index { get }

// 最後の次のインデックス var endIndex: Index { get }

// 指定したインデックスに該当する要素 subscript (position: Index) -> _Element { get }

// あるインデックスの次のインデックスを取得 func index(after i: Index) -> Index

Page 42: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 43: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 44: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

protocol Indexable {

associatedtype Index : ForwardIndexType

}

Page 45: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

protocol Indexable : IndexableBase {

}

protocol IndexableBase {

associatedtype Index : Comparable

}

Page 46: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 47: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

protocol ForwardIndexType {

func successor() -> Self }

protocol BidirectionalIndexType : ForwardIndexType {

func predecessor() -> Self }

/* 継承関係を簡略化して記載しています */

Page 48: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

protocol Comparable : Equatable {

}

Page 49: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

protocol Indexable {

var startIndex: Index { get } var endIndex: Index { get } subscript (position: Index) -> _Element { get }

func index(after i: Index) -> Index

}

Page 50: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 51: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

protocol Indexable {

associatedtype Index : Comparable

var startIndex: Index { get } var endIndex: Index { get } subscript (position: Index) -> _Element { get }

func index(after i: Index) -> Index

}

Page 52: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 53: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

Swift Lab で聞いてみた!

Page 54: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 55: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

// 前方移動性をもつ索引型 protocol ForwardIndexType: Equatable // 前後方移動性をもつ索引型 protocol BidirectionalIndexType: ForwardIndexType // どこへも自由に即時移動できる索引型 protocol RandomAccessIndexType: BidirectionalIndexType // コレクションは集積性と、使用する索引を規定 protocol CollectionType { associatedtype Index : ForwardIndexType

Page 56: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

// 前方移動性をもつコレクション protocol Collection: Indexable // 前後方移動性をもつコレクション protocol BidirectionalCollection: BidirectionalIndexable // 範囲内を自由に即時移動できるコレクション protocol RandomAccessCollection: RandomAccessIndexable // インデックスに求められるのは比較性のみ protocol Collection { associatedtype Index : Comparable

Page 57: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

// このコレクションは前後へ移動可能 struct MyCollection : BidirectionalCollection {

// 索引として文字列を使う typealias Index = String

}

Page 58: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

// Int を索引にもつデータ表現は実装の手間が増える struct MyArray<Element> : RandomAccessCollection {

typealias Index = Int

}

// String を索引にもつデータ表現は簡略化される struct Namelist : Collection {

typealias Index = String

Page 59: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 60: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 61: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 62: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

@wran_unused_result func calculate(values: Int...) -> Int { … }

// 普通は変数に受ける let answer = calculate(1, 2, 3)

// 変数に受けないと警告になる calculate(1, 2, 3)

// 変数に受けたくないときは、明示的に破棄する _ = calculate(1, 2, 3)

Page 63: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

// この書き方で、戻り値を使わないと警告 func calculate(values: Int...) -> Int { … }

// 戻り値を使わなくて良いことを許可したい場合

@discardableResult func apply(effect: Effect) -> Image { … }

Page 64: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 65: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

@wran_unused_result func calculate(values: Int...) -> Int { … }

// 普通は変数に受ける let answer = calculate(1, 2, 3)

// Playground だと警告にならない calculate(1, 2, 3)

Page 66: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

Swift Lab で聞いてみた!

Page 67: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

// このようなコードが自動生成される(喩え) let tmp = getValue() print(tmp)

Page 68: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 69: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 70: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

// ただし、この段階では実行時エラー use of unresolved identifier '$builtin_log_with_id' use of unresolved identifier '$builtin_log_scope_exit' use of unresolved identifier '$builtin_log_scope_entry' use of unresolved identifier '$builtin_log_scope_exit' use of unresolved identifier '$builtin_log_scope_exit' use of unresolved identifier '$builtin_log_scope_entry' use of unresolved identifier '$builtin_log_scope_exit' use of unresolved identifier '$builtin_log_with_id'

Page 74: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

@_silgen_name ("playground_log_scope_entry") func builtin_log_scope_entry(_:,_:,_:,_:) -> AnyObject? @_silgen_name ("playground_log_scope_exit") func builtin_log_scope_exit(_:,_:,_:,_:) -> AnyObject? @_silgen_name ("playground_log_postprint") func builtin_postPrint(_:,_:,_:,_:) -> AnyObject? @_silgen_name ("DVTSendPlaygroundLogData") func builtin_send_data(_ object:AnyObject?) { @_silgen_name ("GetOutput") func get_output() -> String

Page 75: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 76: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

/* 再掲 */

Page 77: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 78: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai
Page 79: WWDC 旅行の余談と Swift Open Hours 3 - Swift ラボで聞いてきた話 #cocoa_kansai

Enjoy! Swift/* Thank you */