SlideShare une entreprise Scribd logo
1  sur  79
Télécharger pour lire hors ligne
/* 2016.07.09 @ 第68回 Cocoa 勉強会関西 */
/**
*/
/* @es_kumagai */
/**
*/


@niwatako
/* 2016/06/13 2016/06/17 */
/* 2016/06/13 2016/06/17 */


// 最初のインデックス
var startIndex: Index { get }
// 最後の次のインデックス
var endIndex: Index { get }
// 指定したインデックスに該当する要素
subscript (position: Index) -> _Element { get }
// 最初のインデックス
var startIndex: Index { get }
// 最後の次のインデックス
var endIndex: Index { get }
// 指定したインデックスに該当する要素
subscript (position: Index) -> _Element { get }
// あるインデックスの次のインデックスを取得
func index(after i: Index) -> Index
protocol Indexable {
associatedtype Index : ForwardIndexType
}
protocol Indexable : IndexableBase {
}
protocol IndexableBase {
associatedtype Index : Comparable
}
protocol ForwardIndexType {
func successor() -> Self
}
protocol BidirectionalIndexType:ForwardIndexType {
func predecessor() -> Self
}
/* 継承関係を簡略化して記載しています */
protocol Comparable : Equatable {
}
protocol Indexable {
var startIndex: Index { get }
var endIndex: Index { get }
subscript (position: Index) -> _Element { get }
func index(after i: Index) -> Index
}
protocol Indexable {
associatedtype Index : Comparable
var startIndex: Index { get }
var endIndex: Index { get }
subscript (position: Index) -> _Element { get }
func index(after i: Index) -> Index
}
Swift Lab で聞いてみた!
// 前方移動性をもつ索引型
protocol ForwardIndexType: Equatable
// 前後方移動性をもつ索引型
protocol BidirectionalIndexType: ForwardIndexType
// どこへも自由に即時移動できる索引型
protocol RandomAccessIndexType: BidirectionalIndexType
// コレクションは集積性と、使用する索引を規定
protocol CollectionType {
associatedtype Index : ForwardIndexType
// 前方移動性をもつコレクション
protocol Collection: Indexable
// 前後方移動性をもつコレクション
protocol BidirectionalCollection: BidirectionalIndexable
// 範囲内を自由に即時移動できるコレクション
protocol RandomAccessCollection: RandomAccessIndexable
// インデックスに求められるのは比較性のみ
protocol Collection {
associatedtype Index : Comparable
// このコレクションは前後へ移動可能
struct MyCollection : BidirectionalCollection {
// 索引として文字列を使う
typealias Index = String
}
// Int を索引にもつデータ表現は実装の手間が増える
struct MyArray<Element> : RandomAccessCollection {
typealias Index = Int
}
// String を索引にもつデータ表現は簡略化される
struct Namelist : Collection {
typealias Index = String


@wran_unused_result
func calculate(values: Int...) -> Int { … }
// 普通は変数に受ける
let answer = calculate(1, 2, 3)
// 変数に受けないと警告になる
calculate(1, 2, 3)
// 変数に受けたくないときは、明示的に破棄する
_ = calculate(1, 2, 3)
// この書き方で、戻り値を使わないと警告
func calculate(values: Int...) -> Int { … }
// 戻り値を使わなくて良いことを許可したい場合
@discardableResult
func apply(effect: Effect) -> Image { … }
@wran_unused_result
func calculate(values: Int...) -> Int { … }
// 普通は変数に受ける
let answer = calculate(1, 2, 3)
// Playground だと警告にならない
calculate(1, 2, 3)
Swift Lab で聞いてみた!
// このようなコードが自動生成される(喩え)
let tmp = getValue()
print(tmp)
// ただし、この段階では実行時エラー
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'




@_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


/* 再掲 */
Enjoy! Swift
/* Thank you */

Contenu connexe

Tendances

Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
Akira Takahashi
 
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みくださいC++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みください
digitalghost
 
C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competition
yak1ex
 
C++11概要 ライブラリ編
C++11概要 ライブラリ編C++11概要 ライブラリ編
C++11概要 ライブラリ編
egtra
 

Tendances (20)

Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12
 
メタプログラミング C#
メタプログラミング C#メタプログラミング C#
メタプログラミング C#
 
Emcjp item21
Emcjp item21Emcjp item21
Emcjp item21
 
Haskellの型安全性の力よ〜参照透明性編〜
Haskellの型安全性の力よ〜参照透明性編〜Haskellの型安全性の力よ〜参照透明性編〜
Haskellの型安全性の力よ〜参照透明性編〜
 
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
 
ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体
 
What is template
What is templateWhat is template
What is template
 
error handling using expected
error handling using expectederror handling using expected
error handling using expected
 
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
 
Emcpp0506
Emcpp0506Emcpp0506
Emcpp0506
 
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みくださいC++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みください
 
大人のお型付け
大人のお型付け大人のお型付け
大人のお型付け
 
Emcpp item31
Emcpp item31Emcpp item31
Emcpp item31
 
言語処理系入門4
言語処理系入門4言語処理系入門4
言語処理系入門4
 
C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competition
 
C++11概要 ライブラリ編
C++11概要 ライブラリ編C++11概要 ライブラリ編
C++11概要 ライブラリ編
 
C#6.0の新機能紹介
C#6.0の新機能紹介C#6.0の新機能紹介
C#6.0の新機能紹介
 
Map
MapMap
Map
 
Applicative functor
Applicative functorApplicative functor
Applicative functor
 
Move semantics
Move semanticsMove semantics
Move semantics
 

En vedette

En vedette (6)

Swift Open Hours 2 - Swift ラボで聞いてきた話
Swift Open Hours 2 - Swift ラボで聞いてきた話Swift Open Hours 2 - Swift ラボで聞いてきた話
Swift Open Hours 2 - Swift ラボで聞いてきた話
 
iOSにおけるUIテスト@potetotips
iOSにおけるUIテスト@potetotipsiOSにおけるUIテスト@potetotips
iOSにおけるUIテスト@potetotips
 
FiNCとマイクロサービス
FiNCとマイクロサービスFiNCとマイクロサービス
FiNCとマイクロサービス
 
Client-Side Deep Learning
Client-Side Deep LearningClient-Side Deep Learning
Client-Side Deep Learning
 
女性向けサービスでコンバージョン数を爆上げさせた話 〜ネイルブックが1年間でCV数を69倍にした方法〜
女性向けサービスでコンバージョン数を爆上げさせた話 〜ネイルブックが1年間でCV数を69倍にした方法〜女性向けサービスでコンバージョン数を爆上げさせた話 〜ネイルブックが1年間でCV数を69倍にした方法〜
女性向けサービスでコンバージョン数を爆上げさせた話 〜ネイルブックが1年間でCV数を69倍にした方法〜
 
Ibis2016okanohara
Ibis2016okanoharaIbis2016okanohara
Ibis2016okanohara
 

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

実践 Reactive Extensions
実践 Reactive Extensions実践 Reactive Extensions
実践 Reactive Extensions
Shin Ise
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
yoshiaki iwanaga
 
Scala.jsはじめました?
Scala.jsはじめました?Scala.jsはじめました?
Scala.jsはじめました?
K Kinzal
 
PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方
Satoshi Nagayasu
 
第2回デザインパターン資料
第2回デザインパターン資料第2回デザインパターン資料
第2回デザインパターン資料
gaaupp
 
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよサーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよ
koji lin
 
Hakodate - simple framework
Hakodate - simple frameworkHakodate - simple framework
Hakodate - simple framework
Hiroaki Murayama
 
Knct-SG #1 Parser入門
Knct-SG #1 Parser入門Knct-SG #1 Parser入門
Knct-SG #1 Parser入門
y1r96 Ueno
 

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

Swift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposiumSwift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposium
 
実践 Reactive Extensions
実践 Reactive Extensions実践 Reactive Extensions
実践 Reactive Extensions
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
 
Scala.jsはじめました?
Scala.jsはじめました?Scala.jsはじめました?
Scala.jsはじめました?
 
PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方
 
第2回デザインパターン資料
第2回デザインパターン資料第2回デザインパターン資料
第2回デザインパターン資料
 
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
 
Dart のコード自動生成の仕組みと、コード自動生成のパッケージを自作する方法について
Dart のコード自動生成の仕組みと、コード自動生成のパッケージを自作する方法についてDart のコード自動生成の仕組みと、コード自動生成のパッケージを自作する方法について
Dart のコード自動生成の仕組みと、コード自動生成のパッケージを自作する方法について
 
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよサーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよ
 
20071030
2007103020071030
20071030
 
Active Directoryデータの "大きい整数"
Active Directoryデータの "大きい整数"Active Directoryデータの "大きい整数"
Active Directoryデータの "大きい整数"
 
Ylug 110th kpatch code reading
Ylug 110th kpatch code readingYlug 110th kpatch code reading
Ylug 110th kpatch code reading
 
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)
 
jQuery超入門編
jQuery超入門編jQuery超入門編
jQuery超入門編
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
 
Hakodate - simple framework
Hakodate - simple frameworkHakodate - simple framework
Hakodate - simple framework
 
J qmobiはjqueryから軽量化しているか
J qmobiはjqueryから軽量化しているかJ qmobiはjqueryから軽量化しているか
J qmobiはjqueryから軽量化しているか
 
Wakanda#1
Wakanda#1Wakanda#1
Wakanda#1
 
APIKit
APIKitAPIKit
APIKit
 
Knct-SG #1 Parser入門
Knct-SG #1 Parser入門Knct-SG #1 Parser入門
Knct-SG #1 Parser入門
 

Plus de Tomohiro Kumagai

Plus de Tomohiro Kumagai (20)

最近気づいた勉強法 — 勉強会開催の習慣化 #yumemi_grow
最近気づいた勉強法 — 勉強会開催の習慣化 #yumemi_grow最近気づいた勉強法 — 勉強会開催の習慣化 #yumemi_grow
最近気づいた勉強法 — 勉強会開催の習慣化 #yumemi_grow
 
Swift 所有権 要諦 #ゆるちとせ
Swift 所有権 要諦 #ゆるちとせSwift 所有権 要諦 #ゆるちとせ
Swift 所有権 要諦 #ゆるちとせ
 
_Function Builders in Swift #love_swift
_Function Builders in Swift #love_swift_Function Builders in Swift #love_swift
_Function Builders in Swift #love_swift
 
Property Wrappers の特徴を眺める #swiftzoomin
Property Wrappers の特徴を眺める #swiftzoominProperty Wrappers の特徴を眺める #swiftzoomin
Property Wrappers の特徴を眺める #swiftzoomin
 
みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料
みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料
みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料
 
みんなで Swift 復習会
GO! in 札幌 – 10th′′
みんなで Swift 復習会
GO! in 札幌 – 10th′′みんなで Swift 復習会
GO! in 札幌 – 10th′′
みんなで Swift 復習会
GO! in 札幌 – 10th′′
 
イニシャライザー Part 2.5 #hakataswift
イニシャライザー Part 2.5 #hakataswiftイニシャライザー Part 2.5 #hakataswift
イニシャライザー Part 2.5 #hakataswift
 
ニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラ
ニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラ
ニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラ
 
Swift クラスのイニシャライザー #devsap
Swift クラスのイニシャライザー #devsapSwift クラスのイニシャライザー #devsap
Swift クラスのイニシャライザー #devsap
 
iOSCon 2019 in London #ioscon #love_swift
iOSCon 2019 in London #ioscon #love_swiftiOSCon 2019 in London #ioscon #love_swift
iOSCon 2019 in London #ioscon #love_swift
 
Around the 変数 let #love_swift
Around the 変数 let #love_swiftAround the 変数 let #love_swift
Around the 変数 let #love_swift
 
もくもく執筆会 #技術同人誌再販Night
もくもく執筆会 #技術同人誌再販Nightもくもく執筆会 #技術同人誌再販Night
もくもく執筆会 #技術同人誌再販Night
 
みんなで Swift 復習会 GO! in 岩手 – 9th′
みんなで Swift 復習会 GO! in 岩手 – 9th′みんなで Swift 復習会 GO! in 岩手 – 9th′
みんなで Swift 復習会 GO! in 岩手 – 9th′
 
macOS アプリで Swift Package Manager を使ってみる #love_swift #hakataswift
macOS アプリで Swift Package Manager を使ってみる #love_swift #hakataswiftmacOS アプリで Swift Package Manager を使ってみる #love_swift #hakataswift
macOS アプリで Swift Package Manager を使ってみる #love_swift #hakataswift
 
みんなで Swift 復習会 GO! in 福岡 – 8th′ #minna_de_swift
みんなで Swift 復習会 GO! in 福岡 – 8th′ #minna_de_swiftみんなで Swift 復習会 GO! in 福岡 – 8th′ #minna_de_swift
みんなで Swift 復習会 GO! in 福岡 – 8th′ #minna_de_swift
 
Getting Started with Attending iOSCon in London 高画質・追記版 #love_swift #ioscon
Getting Started with Attending iOSCon in London 高画質・追記版 #love_swift #iosconGetting Started with Attending iOSCon in London 高画質・追記版 #love_swift #ioscon
Getting Started with Attending iOSCon in London 高画質・追記版 #love_swift #ioscon
 
みんなで Swift 復習会
GO! in 京都 – 6th′
みんなで Swift 復習会
GO! in 京都 – 6th′みんなで Swift 復習会
GO! in 京都 – 6th′
みんなで Swift 復習会
GO! in 京都 – 6th′
 
みんなで Swift 復習会 GO! in 福岡 – 5th′
みんなで Swift 復習会 GO! in 福岡 – 5th′みんなで Swift 復習会 GO! in 福岡 – 5th′
みんなで Swift 復習会 GO! in 福岡 – 5th′
 
勉強会の東京外開催の気持ち #yuru_bounen2017
勉強会の東京外開催の気持ち #yuru_bounen2017勉強会の東京外開催の気持ち #yuru_bounen2017
勉強会の東京外開催の気持ち #yuru_bounen2017
 
みんなで Swift 復習会 GO! in 福岡・発表資料
みんなで Swift 復習会 GO! in 福岡・発表資料みんなで Swift 復習会 GO! in 福岡・発表資料
みんなで Swift 復習会 GO! in 福岡・発表資料
 

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