SlideShare uma empresa Scribd logo
1 de 73
Baixar para ler offline
Swift 2 の新機能
Protocol Extension
1
安達 勇一
クラスメソッド株式会社
2015年06月19日
Ⓒ Classmethod, Inc.
#cmdevio
2
安達 勇一
• 2013/12 入社

• TwitterID:   
@UsrNameu1

• Github:   
https://github.com/UsrNameu1

• Blog:   
http://dev.classmethod.jp/
author/yad

•        で連載やって
ます
Topics for today
• Protocol Extensionとは
• Protocol Extension詳細
• 標準APIの変更
3Ⓒ Classmethod, Inc.
Topics for today
• Protocol Extensionとは
• Protocol Extension詳細
• 標準APIの変更
4Ⓒ Classmethod, Inc.
Protocol
Extensionとは
• Protocolのおさらい
• Extensionのおさらい
• Protocol Extensionとは
5Ⓒ Classmethod, Inc.
Protocolのおさらい
• Javaでいうところのインターフェイスのようなもの
6Ⓒ Classmethod, Inc.
protocol Comparable {
func compareTo(other: Self) -> Bool
}
#cmdevio
Protocolのおさらい
• Protocolに定義できる宣言は
• メソッド
• プロパティ
• subscript
7Ⓒ Classmethod, Inc.
func append(x: Generator.Element)
var hashValue: Int { get }
subscript(index: Int) -> Generator.Element
#cmdevio
Protocolのおさらい
• Protocolに定義できる宣言は
• イニシャライザ
• typealias
• 演算子
8Ⓒ Classmethod, Inc.
init(floatLiteral value: Double)
typealias Element
func == (lhs: Self, rhs: Self) -> Bool
#cmdevio
Protocolのおさらい
• Selfは定義したProtocolに準拠した型を示す
9Ⓒ Classmethod, Inc.
protocol Equatable {
func == (lhs: Self, rhs: Self) -> Bool
}
struct Entity {
let id: Int
}
extension Entity: Equatable {}
func == (lhs: Entity, rhs: Entity) -> Bool {
return lhs.id == rhs.id
}
#cmdevio
Protocolのおさらい
• Selfは定義したProtocolに準拠した型を示す
10Ⓒ Classmethod, Inc.
protocol Equatable {
func == (lhs: Self, rhs: Self) -> Bool
}
struct Entity {
let id: Int
}
extension Entity: Equatable {}
func == (lhs: Entity, rhs: Entity) -> Bool {
return lhs.id == rhs.id
} EquatableのSelfはここではEntityとしてふるまう
#cmdevio
Protocolのおさらい
• Selfはドット経由でProtocolの中で用いれる
typealiasにアクセスできる
11Ⓒ Classmethod, Inc.
protocol Containable {
typealias InnerType
func contain(content: Self.InnerType)
}
#cmdevio
Protocol
Extensionとは
• Protocolのおさらい
• Extensionのおさらい
• Protocol Extensionとは
12Ⓒ Classmethod, Inc.
Extensionのおさらい
• Objective-Cでいうところのカテゴリのようなもの
13Ⓒ Classmethod, Inc.
extension Int {
func power(times: Int) -> Int {
return Int(
pow(Double(self), Double(times))
)
}
}
#cmdevio
Extensionのおさらい
• Objective-Cでいうところのカテゴリのようなもの
14Ⓒ Classmethod, Inc.
extension Int {
func power(times: Int) -> Int {
return Int(
pow(Double(self), Double(times))
)
}
} Int型に累乗計算をするpowerメソッドを追加
#cmdevio
Extensionのおさらい
• Extensionに定義できる宣言は
• 計算プロパティ(クラス、ストラクチャに対して)
• タイププロパティ
• メソッド
• subscript
• イニシャライザ
• ネストされた型
15Ⓒ Classmethod, Inc. #cmdevio
Extensionのおさらい
• Extensionで既存の型をProtocolに
準拠できる
16Ⓒ Classmethod, Inc.
protocol Writable {
func write(content: Self)
}
extension String: Writable {
func write(content: String) {
....
}
}
#cmdevio
Extensionのおさらい
• class, struct, enumに対して宣言できた
17Ⓒ Classmethod, Inc.
extension SomeClass {
}
extension SomeStruct {
}
extension SomeEnum {
}
#cmdevio
Protocol
Extensionとは
• Protocolのおさらい
• Extensionのおさらい
• Protocol Extensionとは
18Ⓒ Classmethod, Inc.
Protocol Extension とは
• class, struct, enum に加えて
protocol に対してもExtensionが
宣言できるようになった
19Ⓒ Classmethod, Inc.
protocol Writable {
func write(content: Self)
}
extension Writable {
…
}
#cmdevio
Topics for today
• Protocol Extensionとは
• Protocol Extension詳細
• 標準APIの変更
20Ⓒ Classmethod, Inc.
Protocol
Extension 詳細
21Ⓒ Classmethod, Inc.
• Protocolに対する実装
• Extension対象への制約
• Selfへの制約
Protocol に対する実装
• Protocol 本体での宣言に対する
デフォルト実装をExtensionで決められる
22Ⓒ Classmethod, Inc.
protocol NumberComponent {
typealias NumberType
var defaultNumber : NumberType { get }
}
extension NumberComponent {
typealias NumberType = Int
var defaultNumber: Int {
return 1
}
} #cmdevio
Protocol に対する実装
• Protocol 本体での宣言に対する
デフォルト実装をExtensionで決められる
23Ⓒ Classmethod, Inc.
protocol NumberComponent {
typealias NumberType
var defaultNumber : NumberType { get }
}
extension NumberComponent {
typealias NumberType = Int
var defaultNumber: Int {
return 1
}
}
デフォルトの
NumberTypeはInt
デフォルトのdefaultNumberはIn
#cmdevio
Protocol に対する実装
• デフォルト実装は準拠する型で実装する必要がない
24Ⓒ Classmethod, Inc.
class NumberRepository: NumberComponent {
}
#cmdevio
Protocol に対する実装
• デフォルト実装は準拠する型で実装する必要がない
25Ⓒ Classmethod, Inc.
class NumberRepository: NumberComponent {
}
デフォルト実装が宣言されているときはエラーにならない
#cmdevio
Protocol に対する実装
• Protocol本体のインターフェイスを使って
実装できる
26Ⓒ Classmethod, Inc.
protocol SequenceType {
func map<T>(
transform: Self.Generator.Element -> T
) -> [T]
func filter(
includeElement:
Self.Generator.Element -> Bool
) -> [Self.Generator.Element]
}
#cmdevio
Protocol に対する実装
• Protocol本体のインターフェイスを使って
実装できる
27Ⓒ Classmethod, Inc.
protocol SequenceType {
func map<T>(
transform: Self.Generator.Element -> T
) -> [T]
func filter(
includeElement:
Self.Generator.Element -> Bool
) -> [Self.Generator.Element]
}
個々の要素をマッピングするメソッド
要素をフィルタリングするメソッド
#cmdevio
Protocol に対する実装
• Protocol本体のインターフェイスを使って
実装できる
28Ⓒ Classmethod, Inc.
extension SequenceType {
func filterMap<T>(
includeElement:
Self.Generator.Element -> Bool,
transform: Self.Generator.Element -> T
) -> [T] {
return filter(includeElement)
.map(transform)
}
} #cmdevio
Protocol に対する実装
• Protocol本体のインターフェイスを使って
実装できる
29Ⓒ Classmethod, Inc.
extension SequenceType {
func filterMap<T>(
includeElement:
Self.Generator.Element -> Bool,
transform: Self.Generator.Element -> T
) -> [T] {
return filter(includeElement)
.map(transform)
}
}
要素をフィルタリングしたあとで
マッピングするメソッド
#cmdevio
Protocol
Extension 詳細
30Ⓒ Classmethod, Inc.
• Protocolに対する実装
• Extension対象への制約
• Selfへの制約
Extension対象への制約
• Extension対象への制約を
ジェネリクスと同じwhere構文でつけられる
31Ⓒ Classmethod, Inc.
extension SequenceType
where Generator.Element == Bool {
var anyTrue: Bool {
return reduce(false) {
acc, elem in acc || elem
}
}
}
#cmdevio
Extension対象への制約
• Extension対象への制約を
ジェネリクスと同じwhere構文でつけられる
32Ⓒ Classmethod, Inc.
extension SequenceType
where Generator.Element == Bool {
var anyTrue: Bool {
return reduce(false) {
acc, elem in acc || elem
}
}
}
Protocolへの実装を
利用する際に
満たす必要のある制約
#cmdevio
Extension対象への制約
• Extension対象への制約を
ジェネリクスと同じwhere構文でつけられる
33Ⓒ Classmethod, Inc.
// true
[true, false, false].anyTrue
// false
[false, false, false].anyTrue
#cmdevio
34Ⓒ Classmethod, Inc.
SequenceType Generator.Element
Array<Bool> Element = Bool
Extension対象への制約
Bool
var anyTrue
#cmdevio
35Ⓒ Classmethod, Inc.
SequenceType Generator.Element
Array<Bool> Element = Bool
Extension対象への制約
Bool
var anyTrue
anyTrueプロパティの
宣言を行った際に
#cmdevio
36Ⓒ Classmethod, Inc.
SequenceType Generator.Element
Array<Bool> Element = Bool
Extension対象への制約
Bool
var anyTrue
呼び出した型が
SequenceTypeに
準拠しているかチェック
#cmdevio
37Ⓒ Classmethod, Inc.
SequenceType Generator.Element
Array<Bool> Element = Bool
Extension対象への制約
Bool
var anyTrue
SequenceTypeの
Generator.Elementが
Boolか
チェック
#cmdevio
38Ⓒ Classmethod, Inc.
SequenceType Generator.Element
Array<Bool> Element = Bool
Extension対象への制約
Bool
var anyTrue
SequenceTypeのGenerator.Elementが
Boolなのでデフォルト実装を使える
#cmdevio
Extension対象への制約
• Extension対象への制約を
ジェネリクスと同じwhere構文でつけられる
39Ⓒ Classmethod, Inc.
// true
[true, false, false].anyTrue
// false
[false, false, false].anyTrue
Generator.Element == Bool を満たす型に対しては
anyTrueプロパティを呼び出せる
#cmdevio
Extension対象への制約
• Extension対象への制約を
満たさないような型に対しては準拠していても
インターフェイスを呼び出せない
40Ⓒ Classmethod, Inc.
// エラー
[1, 2, 3].anyTrue
[3.4, 5.6, 3.2].anyTrue
#cmdevio
41Ⓒ Classmethod, Inc.
SequenceType Generator.Element
Array<Int> Element = Int
Extension対象への制約
Bool
var anyTrue
SequenceTypeの
Generator.Elementが
Boolかチェック
x
#cmdevio
42Ⓒ Classmethod, Inc.
SequenceType Generator.Element
Array<Int> Element = Int
Extension対象への制約
Bool
var anyTrue
SequenceTypeのGenerator.Elementが
Boolではないので
デフォルト実装を使えない
x
#cmdevio
Extension対象への制約
• Extension対象への制約を
満たさないような型に対しては準拠していても
インターフェイスを呼び出せない
43Ⓒ Classmethod, Inc.
// エラー
[1, 2, 3].anyTrue
[3.4, 5.6, 3.2].anyTrue
Generator.Element == Boolの制約に合わないため、
anyTrueプロパティは呼び出せない
#cmdevio
Protocol
Extension 詳細
44Ⓒ Classmethod, Inc.
• Protocolに対する実装
• Extension対象への制約
• Selfへの制約
Selfへの制約
• Protocolに準拠した型を示すSelfもExtensionの
制約対象とできる
45Ⓒ Classmethod, Inc.
protocol Ordered {
func precedes(other: Self) -> Bool
}
#cmdevio
Selfへの制約
• Protocolに準拠した型を示すSelfもExtensionの
制約対象とできる
46Ⓒ Classmethod, Inc.
protocol Ordered {
func precedes(other: Self) -> Bool
}
「先行する」という関係をprecedesメソッドで
定義したOrderedプロトコル
#cmdevio
Selfへの制約
• Protocolに準拠した型を示すSelfもExtensionの
制約対象とできる
47Ⓒ Classmethod, Inc.
extension Ordered
where Self: Comparable {
func precedes(other: Self) -> Bool {
return self < other
}
}
#cmdevio
Selfへの制約
• Protocolに準拠した型を示すSelfもExtensionの
制約対象とできる
48Ⓒ Classmethod, Inc.
extension Ordered
where Self: Comparable {
func precedes(other: Self) -> Bool {
return self < other
}
}
Comparableプロトコルに準拠した型に
対しては既存の演算子を先行する関係の定義に流用する
#cmdevio
• Protocolに準拠した型を示すSelfもExtensionの
制約対象とできる
Selfへの制約
49Ⓒ Classmethod, Inc.
extension Int: Ordered {}
1.precedes(0)
extension Double: Ordered {}
(1.2).precedes(4.1)
#cmdevio
Selfへの制約
50Ⓒ Classmethod, Inc.
Ordered
Comparable
Double Int
func precedes
#cmdevio
Selfへの制約
51Ⓒ Classmethod, Inc.
Ordered
Comparable
Double Int
Orderedに既存の型を準拠させる際に
func precedes
#cmdevio
Selfへの制約
52Ⓒ Classmethod, Inc.
Ordered
Comparable
Double Int
既存の型がComparableに準拠しているか
チェックされる
func precedes
#cmdevio
Selfへの制約
53Ⓒ Classmethod, Inc.
Ordered
Comparable
Double Int
Comparableにも準拠していれば
デフォルト実装を使える
func precedes
#cmdevio
• Protocolに準拠した型を示すSelfもExtensionの
制約対象とできる
Selfへの制約
54Ⓒ Classmethod, Inc.
extension Int: Ordered {}
1.precedes(0)
extension Double: Ordered {}
(1.2).precedes(4.1)
Comparableプロトコルに準拠した型に対しては
先行する関係を示したprecedeメソッドを
実装なしで呼べる
#cmdevio
• Protocolに準拠した型を示すSelfもExtensionの
制約対象とできる
Selfへの制約
55Ⓒ Classmethod, Inc.
struct Rational: Ordered {
var numer: Int
var denom: Int
} // エラー
#cmdevio
Selfへの制約
56Ⓒ Classmethod, Inc.
Ordered
Comparable
Rational
既存の型がComparableに準拠しているか
チェックされる
func precedes
x
#cmdevio
Selfへの制約
57Ⓒ Classmethod, Inc.
Ordered
Comparable
Rational
func precedes
x
Comparableに準拠していなければ
デフォルト実装が使えない
x
#cmdevio
• Protocolに準拠した型を示すSelfもExtensionの
制約対象とできる
Selfへの制約
58Ⓒ Classmethod, Inc.
struct Rational: Ordered {
var numer: Int
var denom: Int
} // エラー
Comparableプロトコルに準拠しない型に対しては
precedesメソッドの実装が必要
#cmdevio
Topics for today
• Protocol Extensionとは
• Protocol Extension詳細
• 標準APIの変更
59Ⓒ Classmethod, Inc.
標準APIの変更
• グローバル関数の変更
60Ⓒ Classmethod, Inc.
グローバル関数の変更
• Swift 1.2 ではProtocol Extensionがつかえず、
Protocolに対するメソッド呼び出しは
グローバル関数で実現されていた。
理想
現実
61Ⓒ Classmethod, Inc.
contains([1, 2, 3, 4], 5)
[1, 2, 3, 4].contains(5)
#cmdevio
グローバル関数の変更
• Swift 1.2 ではProtocol Extensionがつかえず、
Protocolに対するメソッド呼び出しは
グローバル関数で実現されていた。
理想
現実
62Ⓒ Classmethod, Inc.
contains([1, 2, 3, 4], 5)
[1, 2, 3, 4].contains(5)
要素がEquatableなSequenceTypeに対して
. でメソッド呼び出しを行いたかった
第一引数をProtocolに準拠した型の値とした
関数で呼び出していた
#cmdevio
グローバル関数の変更
理想
現実
63Ⓒ Classmethod, Inc.
contains(filter([1, 2, 3, 4]) {
a in a % 2 == 0 }, 5)
[1, 2, 3, 4].filter {
a in a % 2 == 0
}.contains(5)
要素がEquatableなSequenceTypeに対して
. でメソッド呼び出しを行いたかった
第一引数をProtocolに準拠した型の値とした
関数で呼び出していた
#cmdevio
64
グローバル関数の変更
• Swift 1.2 -> 2 でグローバル関数の多くがProtocol
のメソッドに移行した
65Ⓒ Classmethod, Inc.
https://developer.apple.com/library/prerelease/ios/
releasenotes/General/iOS90APIDiffs/modules/Swift.html
#cmdevio
グローバル関数の変更
• Swift 1.2 -> 2 でグローバル関数の多くがProtocol
のメソッドに移行した
66Ⓒ Classmethod, Inc.
https://developer.apple.com/library/prerelease/ios/
releasenotes/General/iOS90APIDiffs/modules/Swift.html
#cmdevio
グローバル関数の変更
• Swift 1.2 -> 2 でグローバル関数の多くがProtocol
のメソッドに移行した
Swift 1.2
Swift 2
67Ⓒ Classmethod, Inc.
contains([1, 2, 3, 4], 5)
[1, 2, 3, 4].contains(5)
#cmdevio
• Swift 1.2 -> 2 でグローバル関数の多くがProtocol
のメソッドに移行した
Swift 1.2
Swift 2
グローバル関数の変更
68Ⓒ Classmethod, Inc.
contains(filter([1, 2, 3, 4]) {
a in a % 2 == 0 }, 5)
[1, 2, 3, 4].filter {
a in a % 2 == 0
}.contains(5)
#cmdevio
69
• プロトコル拡張を使ってプログラミングする
http://ez-net.jp/article/4F/W2t_ixtF/OKrMCHTLSvx7/
• Protocol-Oriented Programming in Swift
https://developer.apple.com/videos/wwdc/2015/?id=408
70Ⓒ Classmethod, Inc.
References
#cmdevio
71Ⓒ Classmethod, Inc.
One more thing…
72Ⓒ Classmethod, Inc.
73Ⓒ Classmethod, Inc.
http://dev.classmethod.jp/
smartphone/wwdc-2015-
swift-2/

Mais conteúdo relacionado

Mais procurados

Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait Uehara Junji
 
第一回社内 Scala 勉強会(一部抜粋)その 2
第一回社内 Scala 勉強会(一部抜粋)その 2第一回社内 Scala 勉強会(一部抜粋)その 2
第一回社内 Scala 勉強会(一部抜粋)その 2lyrical_logical
 
OpenJDK HotSpot C1Compiler Overview
OpenJDK HotSpot C1Compiler OverviewOpenJDK HotSpot C1Compiler Overview
OpenJDK HotSpot C1Compiler Overviewnothingcosmos
 
Perlと出会い、Perlを作る
Perlと出会い、Perlを作るPerlと出会い、Perlを作る
Perlと出会い、Perlを作るgoccy
 
基礎からのCode Contracts
基礎からのCode Contracts基礎からのCode Contracts
基礎からのCode ContractsYoshifumi Kawai
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUehara Junji
 
groovy 2.1.0 20130118
groovy 2.1.0 20130118groovy 2.1.0 20130118
groovy 2.1.0 20130118Uehara Junji
 
TensorFlow Lite Delegateとは?
TensorFlow Lite Delegateとは?TensorFlow Lite Delegateとは?
TensorFlow Lite Delegateとは?Mr. Vengineer
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 TipsTakaaki Suzuki
 
Adaptive optimization of JIT compiler
Adaptive optimization of JIT compilerAdaptive optimization of JIT compiler
Adaptive optimization of JIT compilernothingcosmos
 
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャーssuser070fa9
 

Mais procurados (14)

Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait
 
Aerospike deep dive LDTs
Aerospike deep dive LDTsAerospike deep dive LDTs
Aerospike deep dive LDTs
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
第一回社内 Scala 勉強会(一部抜粋)その 2
第一回社内 Scala 勉強会(一部抜粋)その 2第一回社内 Scala 勉強会(一部抜粋)その 2
第一回社内 Scala 勉強会(一部抜粋)その 2
 
OpenJDK HotSpot C1Compiler Overview
OpenJDK HotSpot C1Compiler OverviewOpenJDK HotSpot C1Compiler Overview
OpenJDK HotSpot C1Compiler Overview
 
Perlと出会い、Perlを作る
Perlと出会い、Perlを作るPerlと出会い、Perlを作る
Perlと出会い、Perlを作る
 
基礎からのCode Contracts
基礎からのCode Contracts基礎からのCode Contracts
基礎からのCode Contracts
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
 
groovy 2.1.0 20130118
groovy 2.1.0 20130118groovy 2.1.0 20130118
groovy 2.1.0 20130118
 
ScalaMatsuri 2016
ScalaMatsuri 2016ScalaMatsuri 2016
ScalaMatsuri 2016
 
TensorFlow Lite Delegateとは?
TensorFlow Lite Delegateとは?TensorFlow Lite Delegateとは?
TensorFlow Lite Delegateとは?
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
 
Adaptive optimization of JIT compiler
Adaptive optimization of JIT compilerAdaptive optimization of JIT compiler
Adaptive optimization of JIT compiler
 
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
 

Semelhante a Swift2 の新機能 Protocol Extension

プロダクトがリリースされるまでを『見える化』することで組織体質を変えていった話
プロダクトがリリースされるまでを『見える化』することで組織体質を変えていった話プロダクトがリリースされるまでを『見える化』することで組織体質を変えていった話
プロダクトがリリースされるまでを『見える化』することで組織体質を変えていった話i35_267 Ishigaki
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniterYuya Matsushima
 
Riverpodでテストを書こう
Riverpodでテストを書こうRiverpodでテストを書こう
Riverpodでテストを書こうShinnosuke Tokuda
 
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をAtsuhiro Kubo
 
ドリコムのInfrastructure as code
ドリコムのInfrastructure as codeドリコムのInfrastructure as code
ドリコムのInfrastructure as codeYosuke Hiraishi
 
Android App Development with Gradle & Android Studio
Android App Development with Gradle & Android StudioAndroid App Development with Gradle & Android Studio
Android App Development with Gradle & Android StudioSoichiro Kashima
 
130329 04
130329 04130329 04
130329 04openrtm
 
20130329 rtm4
20130329 rtm420130329 rtm4
20130329 rtm4openrtm
 
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50Preferred Networks
 
6万行の TypeScript 移行とその後
6万行の TypeScript 移行とその後6万行の TypeScript 移行とその後
6万行の TypeScript 移行とその後Shingo Sasaki
 
170622 02
170622 02170622 02
170622 02openrtm
 
Prometheus超基礎公開用.pdf
Prometheus超基礎公開用.pdfPrometheus超基礎公開用.pdf
Prometheus超基礎公開用.pdf勇 黒沢
 
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22Keisuke Fukuda
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割Toru Yamaguchi
 
Testing and packaging WebRTC Stack
Testing and packaging WebRTC StackTesting and packaging WebRTC Stack
Testing and packaging WebRTC StackAlexandre Gouaillard
 
Rtミドルウェア講習会@名城大学 20140624 2
Rtミドルウェア講習会@名城大学 20140624 2Rtミドルウェア講習会@名城大学 20140624 2
Rtミドルウェア講習会@名城大学 20140624 2openrtm
 
Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開Shogo Kawahara
 
po-2. Python プログラミングの基本
po-2. Python プログラミングの基本po-2. Python プログラミングの基本
po-2. Python プログラミングの基本kunihikokaneko1
 
Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門cch-robo
 

Semelhante a Swift2 の新機能 Protocol Extension (20)

Dependency injection
Dependency injectionDependency injection
Dependency injection
 
プロダクトがリリースされるまでを『見える化』することで組織体質を変えていった話
プロダクトがリリースされるまでを『見える化』することで組織体質を変えていった話プロダクトがリリースされるまでを『見える化』することで組織体質を変えていった話
プロダクトがリリースされるまでを『見える化』することで組織体質を変えていった話
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniter
 
Riverpodでテストを書こう
Riverpodでテストを書こうRiverpodでテストを書こう
Riverpodでテストを書こう
 
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発を
 
ドリコムのInfrastructure as code
ドリコムのInfrastructure as codeドリコムのInfrastructure as code
ドリコムのInfrastructure as code
 
Android App Development with Gradle & Android Studio
Android App Development with Gradle & Android StudioAndroid App Development with Gradle & Android Studio
Android App Development with Gradle & Android Studio
 
130329 04
130329 04130329 04
130329 04
 
20130329 rtm4
20130329 rtm420130329 rtm4
20130329 rtm4
 
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50
 
6万行の TypeScript 移行とその後
6万行の TypeScript 移行とその後6万行の TypeScript 移行とその後
6万行の TypeScript 移行とその後
 
170622 02
170622 02170622 02
170622 02
 
Prometheus超基礎公開用.pdf
Prometheus超基礎公開用.pdfPrometheus超基礎公開用.pdf
Prometheus超基礎公開用.pdf
 
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
Testing and packaging WebRTC Stack
Testing and packaging WebRTC StackTesting and packaging WebRTC Stack
Testing and packaging WebRTC Stack
 
Rtミドルウェア講習会@名城大学 20140624 2
Rtミドルウェア講習会@名城大学 20140624 2Rtミドルウェア講習会@名城大学 20140624 2
Rtミドルウェア講習会@名城大学 20140624 2
 
Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開
 
po-2. Python プログラミングの基本
po-2. Python プログラミングの基本po-2. Python プログラミングの基本
po-2. Python プログラミングの基本
 
Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門
 

Mais de Yuichi Adachi

Seminar on Quantum Computation & Quantum Information part28
Seminar on Quantum Computation & Quantum Information part28Seminar on Quantum Computation & Quantum Information part28
Seminar on Quantum Computation & Quantum Information part28Yuichi Adachi
 
Seminar on Quantum Computation & Quantum Information part19
Seminar on Quantum Computation & Quantum Information part19Seminar on Quantum Computation & Quantum Information part19
Seminar on Quantum Computation & Quantum Information part19Yuichi Adachi
 
Seminar on Quantum Computation & Quantum Information part15
Seminar on Quantum Computation & Quantum Information part15Seminar on Quantum Computation & Quantum Information part15
Seminar on Quantum Computation & Quantum Information part15Yuichi Adachi
 
Seminar on Quantum Computation & Quantum Information part14
Seminar on Quantum Computation & Quantum Information part14Seminar on Quantum Computation & Quantum Information part14
Seminar on Quantum Computation & Quantum Information part14Yuichi Adachi
 
VIPER アーキテクチャによる iOS アプリの設計
VIPER アーキテクチャによる iOS アプリの設計VIPER アーキテクチャによる iOS アプリの設計
VIPER アーキテクチャによる iOS アプリの設計Yuichi Adachi
 
[iOS8] 新たな線形代数ライブラリ Linear Algebra
[iOS8] 新たな線形代数ライブラリ Linear Algebra[iOS8] 新たな線形代数ライブラリ Linear Algebra
[iOS8] 新たな線形代数ライブラリ Linear AlgebraYuichi Adachi
 
Swiftの新機能 Optional
Swiftの新機能 OptionalSwiftの新機能 Optional
Swiftの新機能 OptionalYuichi Adachi
 
ユニットテスト初学者がKiwiFramework非同期テストで失敗した
ユニットテスト初学者がKiwiFramework非同期テストで失敗したユニットテスト初学者がKiwiFramework非同期テストで失敗した
ユニットテスト初学者がKiwiFramework非同期テストで失敗したYuichi Adachi
 

Mais de Yuichi Adachi (10)

Seminar on Quantum Computation & Quantum Information part28
Seminar on Quantum Computation & Quantum Information part28Seminar on Quantum Computation & Quantum Information part28
Seminar on Quantum Computation & Quantum Information part28
 
Seminar on Quantum Computation & Quantum Information part19
Seminar on Quantum Computation & Quantum Information part19Seminar on Quantum Computation & Quantum Information part19
Seminar on Quantum Computation & Quantum Information part19
 
Seminar on Quantum Computation & Quantum Information part15
Seminar on Quantum Computation & Quantum Information part15Seminar on Quantum Computation & Quantum Information part15
Seminar on Quantum Computation & Quantum Information part15
 
ゲンバのSwift
ゲンバのSwiftゲンバのSwift
ゲンバのSwift
 
Seminar on Quantum Computation & Quantum Information part14
Seminar on Quantum Computation & Quantum Information part14Seminar on Quantum Computation & Quantum Information part14
Seminar on Quantum Computation & Quantum Information part14
 
VIPER アーキテクチャによる iOS アプリの設計
VIPER アーキテクチャによる iOS アプリの設計VIPER アーキテクチャによる iOS アプリの設計
VIPER アーキテクチャによる iOS アプリの設計
 
[iOS8] 新たな線形代数ライブラリ Linear Algebra
[iOS8] 新たな線形代数ライブラリ Linear Algebra[iOS8] 新たな線形代数ライブラリ Linear Algebra
[iOS8] 新たな線形代数ライブラリ Linear Algebra
 
Swiftの新機能 Optional
Swiftの新機能 OptionalSwiftの新機能 Optional
Swiftの新機能 Optional
 
ユニットテスト初学者がKiwiFramework非同期テストで失敗した
ユニットテスト初学者がKiwiFramework非同期テストで失敗したユニットテスト初学者がKiwiFramework非同期テストで失敗した
ユニットテスト初学者がKiwiFramework非同期テストで失敗した
 
Applicative functor
Applicative functorApplicative functor
Applicative functor
 

Swift2 の新機能 Protocol Extension