SlideShare a Scribd company logo
1 of 75
Download to read offline
EZ-‐‑‒NET  熊⾕谷友宏    
http://ez-‐‑‒net.jp/
2015.04.11  
@  第61回  Cocoa  勉強会関⻄西
Swift  カジュアルプログラミング
《基礎》不不変値と可変値
〜~  前回の続き(おまけ)〜~
熊谷友宏
http://ez-net.jp/
@es_kumagai
Xcode 5 徹底解説
IP Phone 音でダイヤル 音で再配達ゴッド
いつもの電卓
for iPhone
いつもの電卓
for iPad
音で再配達
熊谷友宏
http://ez-net.jp/
@es_kumagai
#yidev
横浜 iPhone 開発者勉強会
開催中
不変値と可変値
前回
Swift にある変数のお話
前回に頂いた質問から見えた
今回
いろいろな事柄
前回の内容
▶ 不変値変数と可変値変数
▶ 変数は常にコピー
▶ 値に特化した構造体
まずは訂正
構造体
変数に特化したオブジェクト
訂正
▶ データ型?
▶ オブジェクトとは言わない?
訂正
構造体
▶ オブジェクト指向で

手続きの対象を抽象化する概念
▶ クラス型のインスタンス
▶ Swift では AnyObject で表現
訂正
オブジェクト
訂正
クラス
構造体
データ型
クラス型
オブジェクト
データ
型 Type 実体 Instance
▶ 型は設計図

- class は クラス型 を設計するもの

- struct は データ型 を設計するもの
▶ 型からインスタンスを作る

- クラス型から オブジェクト ができる

- データ型から データ ができる
▶ データを 値 や 状態 として使う
整理すると
AnyObject
AnyObject
▶ プロトコルのひとつ
▶ 全てのクラスが暗黙的に準拠
▶ 明示的には準拠させられない
AnyObject
該当するもの
// クラス
let obj:AnyObject = MyClass()
該当しないもの
// 構造体
let obj:AnyObject = MyStruct()
// 整数(構造体)
let obj:AnyObject = Int(10)
// 文字列(構造体)
let obj:AnyObject = String("STR")
// 列挙型
let obj:AnyObject = MyEnum.A
AnyObject
該当しないもの
// 関数
let obj:AnyObject = reduce
// クロージャー
let obj:AnyObject = { $0 + $1 }
AnyObject
該当するもの
該当しないもの
// クラスの型
let obj:AnyObject = MyClass.self
AnyObject
// 構造体の型
let obj:AnyObject = MyStruct.self
AnyObject
意味
オブジェクトの概念を持っているもの
対象
▶ MyClass
▶ MyClass.Type
(クラスの実体)
(クラスの型)
プロジェクト内のどこかで
AnyObject
Foundation をインポートすると…
ところが
該当するものが変化
// 構造体
let obj:AnyObject = MyStruct()
// 整数(構造体)
let obj:AnyObject = Int(10)
// 文字列(構造体)
let obj:AnyObject = String("STR")
// 列挙型
let obj:AnyObject = MyEnum.A
AnyObject
なぜ Int や String などの 構造体 が
AnyObject になるのか
AnyObject
Foundation の中に理由があるはず
でも、それを探るのは困難そう
AnyObject
NSString や NSNumber が怪しいのですが…
前回の懇親会での一幕
そういえば
Objective-C Bridge
String と NSString って
どうやってブリッジしているの?
Objective-C Bridge
_ObjectiveCBridgeable
STEP 1/7
Objective-C Bridge
struct MyStruct:_ObjectiveCBridgeable {
}
▶ ブリッジさせたい 構造体 を

_ObjectiveCBridgeable に準拠
STEP 2/7
Objective-C Bridge
typealias _ObjectiveCType
▶ ブリッジする対象のクラスを決定
▶ AnyObject 相当のものを指定
STEP 3/7
Objective-C Bridge
static func
_isBridgedToObjectiveC() -> Bool
▶ ブリッジできるかの判定を実装
▶ 自身の型がブリッジできるかを判定
STEP 4/7
Objective-C Bridge
public static func
_getObjectiveCType() -> Any.Type
▶ ブリッジするクラスの型を返却
▶ 必ず _ObjectiveCType.self を返却
STEP 5/7
Objective-C Bridge
public func
_bridgeToObjectiveC() -> _ObjectiveCType
▶ ブリッジ後のインスタンスを返却
▶ 自身の情報から新インスタンスを作成
STEP 6/7
Objective-C Bridge
public static func
_forceBridgeFromObjectiveC(
source: _ObjectiveCType,
inout result: MyObjCBridgeClass?
)
▶ ブリッジ先から自身にブリッジする
▶ as 演算子によるキャスト動作を実装
STEP 7/7
Objective-C Bridge
public static func
_conditionallyBridgeFromObjectiveC(
source: _ObjectiveCType,
inout result: MyObjCBridgeClass?
) -> Bool
▶ ブリッジ先から自身にブリッジする
▶ as? 演算子によるキャスト動作を実装
ブリッジ可能な構造体の完成
用途
Objective-C Bridge
struct MyStruct : _ObjectiveCBridgeable {
typealias _ObjectiveCType = NSString
}
let structValue = MyStruct()
let string = structValue as NSString
Foundation の Objective-C ブリッジも
Objective-C Bridge
この方法で実装されているのでしょう
▶ String
▶ Int
▶ Array<T>

…
もしかして
再び AnyObject
この Objective-C ブリッジと
構造体が AnyObject に変わる事象は
AnyObject
関係している?
AnyObject
関係してました。
// 構造体
let obj:AnyObject = MyStruct()
▶ Swift 構造体が AnyObject に準拠
▶ AnyObject にブリッジできるから?
AnyObject
まとめ
▶ AnyObject はプロトコル
▶ 全てのクラスが暗黙的に準拠する
▶ 原則、クラス以外は準拠しない
▶ AnyObject へブリッジできる

構造体は AnyObject に準拠する
本題
値はコピーされる
前回
変数の特徴
▶ 代入時に内容をコピー
▶ let と var の相互乗り入れを実現
let value = state
let state = value
コピー
コピー
前回
代入時に必ずしも
コピーされるとは限らないのでは?
たぶん そう思います。
コピーの最適化
たぶん 最適化してくれる
最適化が介入できそうな場所は…
▶ コンパイラ、プリプロセッサ

言語仕様の範疇で最適化
▶ オプティマイザー

最終的な最適化の専門フェーズ
▶ 標準ライブラリ

型の設計によるチューニング
コピーの最適化
Swift の強み
▶ 変数は原則コピー

代入時に暗黙的にコピーされる
コピーの最適化
var value:Int = source
Swift
NSMutableNumber* value = source.copy();
Objective-C 明示コピー
暗黙コピー
Swift の強み
▶ 変数は原則コピー

代入時に暗黙的にコピーされる
▶ 不変値と可変値が明確

書き変わらない変数を把握できる
裁量でコピーを省きやすい言語仕様
コピーの最適化
オプティマイザーに期待
コピーの最適化
Array<T> の最適化
Arrayは値型(構造体)
▶ 代入時に暗黙コピー
▶ 全ての要素がコピーの対象
Array<T> の最適化
var values:Array<Int> = sources
Swift 全要素の暗黙コピー
Array<T> の最適化
要素が多いときの処理速度が心配
設計による最適化が図られている
Arrayの最適化
▶ 要素をバッファーで保持
▶ 代入時はポインターのコピーで済ませる
▶ 内容の書き換え時にバッファーをコピー
Array<T> の最適化
内容が変わらないうちは共有する
コピーの動作(代入時)
Array<T> の最適化
配列
Buffer
コピー
配列
バッファーは共有
コピーの動作(書き換え時)
Array<T> の最適化
配列
Buffer
配列配列
Buffer Buffer
×
遅延コピー
書き込み!
Array<T> の最適化
原則コピーの体をなしつつ
最適化を実現
▶ 代入時や引数へ渡すときの

コピーの負荷は心配無用
▶ 内容を書き換えるときに負荷が発生
余談
CGImage
Objective-C
定義
CGImage
Swift
// 実装は隠蔽されているがC構造体
typedef struct CGImage *CGImageRef;
// 実装は隠蔽
typealias CGImageRef = CGImage
Swift
定義
CGImage
▶ AnyObject である
▶ _ObjectiveCBridgeable ではない
▶ Type は __NSCFType(詳細不明)
クラスを使った実装になっている様子
Objective-C とは違った方法で
最適化が図られていそう
CGImage
let の遅延初期化
Swift
概要
let の遅延初期化
▶ Swift 1.2 の新機能
▶ 不変値変数の宣言と初期化を分離可能
let image:UIImage
if condition {
image = UIImage(named: "maru.png")
}
else {
image = UIImage(named: "batsu.png")
}
欠点
let の遅延初期化
▶ 宣言と初期化の分離
▶ コードを追わないと値が分からない
Swift
let image:UIImage
if condition {
image = UIImage(named: "maru.png")
}
else {
image = UIImage(named: "batsu.png")
}
活用できそうな場面がありました。
再帰呼び出し可能なクロージャーを

let だけで実現したい場面
let の遅延初期化
再帰呼び出し可能なクロージャー
let の遅延初期化
▶ let だけで定義すると未初期化エラー
Swift 1.1 時代
let の遅延初期化
let だけで実現しようとすると…
再帰呼び出し可能なクロージャーを
Swift 1.1 までは
➡ 不動点コンビネーター?
let の遅延初期化
次の式を満たすように作る
関数 f を引数に取る関数 g を
不動点コンビネーター
f(g(f)) = g(f)
…らしい
let の遅延初期化
本来の関数 f を g(f) で再起表現できる
関数 g をいっかい嚙ますことで
不動点コンビネーター
ffffff…f(g(f)) = g(f)
…らしい
再帰呼び出し可能なクロージャー
let の遅延初期化
Swift 1.1 時代
再帰呼び出し可能なクロージャー
let の遅延初期化
Swift 1.1 時代
再帰呼び出し可能なクロージャー
let の遅延初期化
▶ var なら宣言と実装を分ければ OK
▶ ただ var の使用はできるだけ避けたい
再帰呼び出し可能なクロージャー
let の遅延初期化
▶ Swift 1.2 からは let でも可能
▶ let で宣言と実装を分ければ OK
おしまい。
構造体
▶ オブジェクトとは呼ばなかった
AnyObject
▶ 全てのクラスが暗黙的に準拠
▶ Objective-C ブリッジ可能な構造体も
値のコピー
▶ 代入時はコピー
▶ 最適化(暗黙コピー、配列型の設計)
今日の内容

More Related Content

What's hot

Swift の可変値と不変値 #cocoa_kansai
Swift の可変値と不変値 #cocoa_kansaiSwift の可変値と不変値 #cocoa_kansai
Swift の可変値と不変値 #cocoa_kansaiTomohiro Kumagai
 
Swift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposiumSwift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposiumTomohiro Kumagai
 
iOS 8/Swift 概要 #ios8yahoo
iOS 8/Swift 概要 #ios8yahooiOS 8/Swift 概要 #ios8yahoo
iOS 8/Swift 概要 #ios8yahooHiramatsu Ryosuke
 
Win32 APIをてなずけよう
Win32 APIをてなずけようWin32 APIをてなずけよう
Win32 APIをてなずけようKouji Matsui
 
Swiftのswitchはとってもパワフル!
Swiftのswitchはとってもパワフル!Swiftのswitchはとってもパワフル!
Swiftのswitchはとってもパワフル!akatsuki174
 
Xcodeを便利に使って爆速開発する #yxcm
Xcodeを便利に使って爆速開発する #yxcm Xcodeを便利に使って爆速開発する #yxcm
Xcodeを便利に使って爆速開発する #yxcm Hiramatsu Ryosuke
 
Swift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウムSwift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウムYuichi Yoshida
 
【Swift】 それ、enumとstructでやってみましょう!!
【Swift】 それ、enumとstructでやってみましょう!!【Swift】 それ、enumとstructでやってみましょう!!
【Swift】 それ、enumとstructでやってみましょう!!Yu Tanaka
 
これからはじめる SwiftPlayground入門
これからはじめる SwiftPlayground入門これからはじめる SwiftPlayground入門
これからはじめる SwiftPlayground入門Hiramatsu Ryosuke
 
リテラルと型の話 #__swift__
リテラルと型の話 #__swift__リテラルと型の話 #__swift__
リテラルと型の話 #__swift__Tomohiro Kumagai
 
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Tomoki Hasegawa
 
Async deepdive before de:code
Async deepdive before de:codeAsync deepdive before de:code
Async deepdive before de:codeKouji Matsui
 
ES6,7で書ける JavaScript
ES6,7で書ける JavaScriptES6,7で書ける JavaScript
ES6,7で書ける JavaScriptShin Sekaryo
 
Blazor0.6.0を用いたスクリプトレスWebアプリ開発の可能性
Blazor0.6.0を用いたスクリプトレスWebアプリ開発の可能性Blazor0.6.0を用いたスクリプトレスWebアプリ開発の可能性
Blazor0.6.0を用いたスクリプトレスWebアプリ開発の可能性Yamamoto Reki
 
js-ctypes - ネイティブコードを呼び出す新しいカタチ
js-ctypes - ネイティブコードを呼び出す新しいカタチjs-ctypes - ネイティブコードを呼び出す新しいカタチ
js-ctypes - ネイティブコードを呼び出す新しいカタチMakoto Kato
 
AngulaとElixirの新しい関係
AngulaとElixirの新しい関係AngulaとElixirの新しい関係
AngulaとElixirの新しい関係陸 谷出
 

What's hot (20)

Swift の可変値と不変値 #cocoa_kansai
Swift の可変値と不変値 #cocoa_kansaiSwift の可変値と不変値 #cocoa_kansai
Swift の可変値と不変値 #cocoa_kansai
 
Swift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposiumSwift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposium
 
iOS 8/Swift 概要 #ios8yahoo
iOS 8/Swift 概要 #ios8yahooiOS 8/Swift 概要 #ios8yahoo
iOS 8/Swift 概要 #ios8yahoo
 
Win32 APIをてなずけよう
Win32 APIをてなずけようWin32 APIをてなずけよう
Win32 APIをてなずけよう
 
Swiftのswitchはとってもパワフル!
Swiftのswitchはとってもパワフル!Swiftのswitchはとってもパワフル!
Swiftのswitchはとってもパワフル!
 
Xcodeを便利に使って爆速開発する #yxcm
Xcodeを便利に使って爆速開発する #yxcm Xcodeを便利に使って爆速開発する #yxcm
Xcodeを便利に使って爆速開発する #yxcm
 
Swift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウムSwift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウム
 
【Swift】 それ、enumとstructでやってみましょう!!
【Swift】 それ、enumとstructでやってみましょう!!【Swift】 それ、enumとstructでやってみましょう!!
【Swift】 それ、enumとstructでやってみましょう!!
 
これからはじめる SwiftPlayground入門
これからはじめる SwiftPlayground入門これからはじめる SwiftPlayground入門
これからはじめる SwiftPlayground入門
 
リテラルと型の話 #__swift__
リテラルと型の話 #__swift__リテラルと型の話 #__swift__
リテラルと型の話 #__swift__
 
Swift勉強会
Swift勉強会Swift勉強会
Swift勉強会
 
MonotaRO LT - ESLintの仕組み
MonotaRO LT - ESLintの仕組みMonotaRO LT - ESLintの仕組み
MonotaRO LT - ESLintの仕組み
 
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法
 
Async deepdive before de:code
Async deepdive before de:codeAsync deepdive before de:code
Async deepdive before de:code
 
ES6,7で書ける JavaScript
ES6,7で書ける JavaScriptES6,7で書ける JavaScript
ES6,7で書ける JavaScript
 
Symfony2
Symfony2Symfony2
Symfony2
 
Blazor0.6.0を用いたスクリプトレスWebアプリ開発の可能性
Blazor0.6.0を用いたスクリプトレスWebアプリ開発の可能性Blazor0.6.0を用いたスクリプトレスWebアプリ開発の可能性
Blazor0.6.0を用いたスクリプトレスWebアプリ開発の可能性
 
js-ctypes - ネイティブコードを呼び出す新しいカタチ
js-ctypes - ネイティブコードを呼び出す新しいカタチjs-ctypes - ネイティブコードを呼び出す新しいカタチ
js-ctypes - ネイティブコードを呼び出す新しいカタチ
 
AngulaとElixirの新しい関係
AngulaとElixirの新しい関係AngulaとElixirの新しい関係
AngulaとElixirの新しい関係
 
Bluetoothでgo!
Bluetoothでgo!Bluetoothでgo!
Bluetoothでgo!
 

Similar to Swift の可変値と不変値 〜 前回の続き(おまけ)〜 #cocoa_kansai

Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Yuto Takei
 
リテラルと型の続きの話 #__swift__
リテラルと型の続きの話 #__swift__リテラルと型の続きの話 #__swift__
リテラルと型の続きの話 #__swift__Tomohiro Kumagai
 
東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみた東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみたYoshiki Shibukawa
 
Java 9 and Future #jjug
Java 9 and Future #jjugJava 9 and Future #jjug
Java 9 and Future #jjugYuji Kubota
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiTomohiro Kumagai
 
iOS UI Component API Design
iOS UI Component API DesigniOS UI Component API Design
iOS UI Component API DesignBrian Gesiak
 
Xcode 6の新機能
Xcode 6の新機能Xcode 6の新機能
Xcode 6の新機能Shingo Sato
 
Objective-C atomicity #idevjp
Objective-C atomicity #idevjpObjective-C atomicity #idevjp
Objective-C atomicity #idevjpTomohiro Kumagai
 
DoActionからJava VMバイトコードに変換する話
DoActionからJava VMバイトコードに変換する話DoActionからJava VMバイトコードに変換する話
DoActionからJava VMバイトコードに変換する話emorins
 
RFC Viewer開発を通して学ぶ!! iOS開発のパターン化
RFC Viewer開発を通して学ぶ!! iOS開発のパターン化RFC Viewer開発を通して学ぶ!! iOS開発のパターン化
RFC Viewer開発を通して学ぶ!! iOS開発のパターン化幸雄 村上
 
「エクストリームエンジニアへの道(Swift編)」
「エクストリームエンジニアへの道(Swift編)」「エクストリームエンジニアへの道(Swift編)」
「エクストリームエンジニアへの道(Swift編)」tech-arts
 
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフトobjc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフトTaketo Sano
 
ななめ45°から見たJavaOne
ななめ45°から見たJavaOneななめ45°から見たJavaOne
ななめ45°から見たJavaOneAdvancedTechNight
 
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京hecomi
 
Obj-CをSwiftにリプレースするお話
Obj-CをSwiftにリプレースするお話Obj-CをSwiftにリプレースするお話
Obj-CをSwiftにリプレースするお話Hitoshi Saito
 
Xcode 再入門「Xcode の検索機能」 #さいたまdev
Xcode 再入門「Xcode の検索機能」 #さいたまdevXcode 再入門「Xcode の検索機能」 #さいたまdev
Xcode 再入門「Xcode の検索機能」 #さいたまdevTomohiro Kumagai
 
Swift 3 その基本ルールを眺める #cswift
Swift 3 その基本ルールを眺める #cswiftSwift 3 その基本ルールを眺める #cswift
Swift 3 その基本ルールを眺める #cswiftTomohiro Kumagai
 

Similar to Swift の可変値と不変値 〜 前回の続き(おまけ)〜 #cocoa_kansai (20)

Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)
 
リテラルと型の続きの話 #__swift__
リテラルと型の続きの話 #__swift__リテラルと型の続きの話 #__swift__
リテラルと型の続きの話 #__swift__
 
東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみた東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみた
 
Java 9 and Future #jjug
Java 9 and Future #jjugJava 9 and Future #jjug
Java 9 and Future #jjug
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
 
iOS UI Component API Design
iOS UI Component API DesigniOS UI Component API Design
iOS UI Component API Design
 
Xcode 6の新機能
Xcode 6の新機能Xcode 6の新機能
Xcode 6の新機能
 
Objective-C atomicity #idevjp
Objective-C atomicity #idevjpObjective-C atomicity #idevjp
Objective-C atomicity #idevjp
 
DoActionからJava VMバイトコードに変換する話
DoActionからJava VMバイトコードに変換する話DoActionからJava VMバイトコードに変換する話
DoActionからJava VMバイトコードに変換する話
 
Cocoa勉強会201302
Cocoa勉強会201302Cocoa勉強会201302
Cocoa勉強会201302
 
RFC Viewer開発を通して学ぶ!! iOS開発のパターン化
RFC Viewer開発を通して学ぶ!! iOS開発のパターン化RFC Viewer開発を通して学ぶ!! iOS開発のパターン化
RFC Viewer開発を通して学ぶ!! iOS開発のパターン化
 
「エクストリームエンジニアへの道(Swift編)」
「エクストリームエンジニアへの道(Swift編)」「エクストリームエンジニアへの道(Swift編)」
「エクストリームエンジニアへの道(Swift編)」
 
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフトobjc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
 
ななめ45°から見たJavaOne
ななめ45°から見たJavaOneななめ45°から見たJavaOne
ななめ45°から見たJavaOne
 
MVCもやもや話
MVCもやもや話MVCもやもや話
MVCもやもや話
 
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
 
Obj-CをSwiftにリプレースするお話
Obj-CをSwiftにリプレースするお話Obj-CをSwiftにリプレースするお話
Obj-CをSwiftにリプレースするお話
 
Xcode 再入門「Xcode の検索機能」 #さいたまdev
Xcode 再入門「Xcode の検索機能」 #さいたまdevXcode 再入門「Xcode の検索機能」 #さいたまdev
Xcode 再入門「Xcode の検索機能」 #さいたまdev
 
Study Swift
Study Swift Study Swift
Study Swift
 
Swift 3 その基本ルールを眺める #cswift
Swift 3 その基本ルールを眺める #cswiftSwift 3 その基本ルールを眺める #cswift
Swift 3 その基本ルールを眺める #cswift
 

More from Tomohiro Kumagai

最近気づいた勉強法 — 勉強会開催の習慣化 #yumemi_grow
最近気づいた勉強法 — 勉強会開催の習慣化 #yumemi_grow最近気づいた勉強法 — 勉強会開催の習慣化 #yumemi_grow
最近気づいた勉強法 — 勉強会開催の習慣化 #yumemi_growTomohiro Kumagai
 
Swift 所有権 要諦 #ゆるちとせ
Swift 所有権 要諦 #ゆるちとせSwift 所有権 要諦 #ゆるちとせ
Swift 所有権 要諦 #ゆるちとせTomohiro Kumagai
 
_Function Builders in Swift #love_swift
_Function Builders in Swift #love_swift_Function Builders in Swift #love_swift
_Function Builders in Swift #love_swiftTomohiro Kumagai
 
Property Wrappers の特徴を眺める #swiftzoomin
Property Wrappers の特徴を眺める #swiftzoominProperty Wrappers の特徴を眺める #swiftzoomin
Property Wrappers の特徴を眺める #swiftzoominTomohiro Kumagai
 
みんなで 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′ オープニング&資料Tomohiro Kumagai
 
みんなで Swift 復習会
GO! in 札幌 – 10th′′
みんなで Swift 復習会
GO! in 札幌 – 10th′′みんなで Swift 復習会
GO! in 札幌 – 10th′′
みんなで Swift 復習会
GO! in 札幌 – 10th′′Tomohiro Kumagai
 
イニシャライザー Part 2.5 #hakataswift
イニシャライザー Part 2.5 #hakataswiftイニシャライザー Part 2.5 #hakataswift
イニシャライザー Part 2.5 #hakataswiftTomohiro Kumagai
 
ニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラ
ニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラ
ニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラTomohiro Kumagai
 
Swift クラスのイニシャライザー #devsap
Swift クラスのイニシャライザー #devsapSwift クラスのイニシャライザー #devsap
Swift クラスのイニシャライザー #devsapTomohiro Kumagai
 
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_swiftTomohiro Kumagai
 
Around the 変数 let #love_swift
Around the 変数 let #love_swiftAround the 変数 let #love_swift
Around the 変数 let #love_swiftTomohiro Kumagai
 
もくもく執筆会 #技術同人誌再販Night
もくもく執筆会 #技術同人誌再販Nightもくもく執筆会 #技術同人誌再販Night
もくもく執筆会 #技術同人誌再販NightTomohiro Kumagai
 
みんなで Swift 復習会 GO! in 岩手 – 9th′
みんなで Swift 復習会 GO! in 岩手 – 9th′みんなで Swift 復習会 GO! in 岩手 – 9th′
みんなで Swift 復習会 GO! in 岩手 – 9th′Tomohiro Kumagai
 
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 #hakataswiftTomohiro Kumagai
 
みんなで 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_swiftTomohiro Kumagai
 
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 #iosconTomohiro Kumagai
 
みんなで Swift 復習会
GO! in 京都 – 6th′
みんなで Swift 復習会
GO! in 京都 – 6th′みんなで Swift 復習会
GO! in 京都 – 6th′
みんなで Swift 復習会
GO! in 京都 – 6th′Tomohiro Kumagai
 
みんなで Swift 復習会 GO! in 福岡 – 5th′
みんなで Swift 復習会 GO! in 福岡 – 5th′みんなで Swift 復習会 GO! in 福岡 – 5th′
みんなで Swift 復習会 GO! in 福岡 – 5th′Tomohiro Kumagai
 
勉強会の東京外開催の気持ち #yuru_bounen2017
勉強会の東京外開催の気持ち #yuru_bounen2017勉強会の東京外開催の気持ち #yuru_bounen2017
勉強会の東京外開催の気持ち #yuru_bounen2017Tomohiro Kumagai
 
みんなで Swift 復習会 GO! in 福岡・発表資料
みんなで Swift 復習会 GO! in 福岡・発表資料みんなで Swift 復習会 GO! in 福岡・発表資料
みんなで Swift 復習会 GO! in 福岡・発表資料Tomohiro Kumagai
 

More from 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 福岡・発表資料
 

Recently uploaded

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 

Recently uploaded (8)

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 

Swift の可変値と不変値 〜 前回の続き(おまけ)〜 #cocoa_kansai