SlideShare une entreprise Scribd logo
1  sur  89
Télécharger pour lire hors ligne
EZ-NET 熊⾕友宏
http://ez-net.jp/
2015.11.28
@ 第64回 Cocoa 勉強会関⻄
NSNotification in Swift
熊谷友宏
EZ-NET http://ez-net.jp/
@es_kumagai
CodePiece
iOS, OS X, Apple Watch アプリ
ソースコードを Twitter と
Gist に同時投稿できる。
いつもの電卓
計算式も見える電卓アプリ。
watchOS 1 対応
音で再配達ゴッド
簡単操作で
再配達の申し込み。
EZ-NET IP Phone
iPhone でひかり電話を使う。
自宅 LAN からの利用専用
CodePiece for OS X
勉強会を楽しむアプリ
ソースコードを Twitter と Gist に同時投稿できる

勉強会で知見をみんなと共有したい時とかに便利!
https://github.com/EZ-NET/CodePiece
できること
コードを添えて呟ける
普通の呟きもできる
ハッシュタグを

付け忘れずに呟ける
(Pre-Release)
熊谷友宏
EZ-NET http://ez-net.jp/
@es_kumagai
横浜 iPhone 開発者勉強会
#yidev
勉強会
わいわい・ゆるく、iPhone 開発者の

みんなで楽しく過ごすのが目的の会
【 横浜・馬車道 】
カジュアル Swift 勉強会
#cswift
ゆるくみんなで Swift を語らえる場を

作りたくて始めた会
【 横浜・青葉台 】
第21回を 2015-12-12 に開催 第4回を 2015-12-26 に開催
熊谷友宏
EZ-NET http://ez-net.jp/
@es_kumagai
Xcode 5 徹底解説 MOSA
書籍 / 登壇
Xcode 5 の全機能を

徹底的に解説した本
OSX/iOS 系の歴史深い

有料会員制の勉強会
紙版は絶版、電子書籍は販売中
秀和システム 10x-Eng.com で取扱予定
Xcode 7 でも役立つはず 法人会員も多数
NSNotification
in Swift
概要
NSNotification
▶ 何かが起こったことを 通知 で伝える
▶ 通知は 通知センター が管理
▶ 知りたい通知を通知センターに登録
▶ 通知があると知らせてくれる
NSNotificationCenter
通知センター
POST
OBSERVE 通知センター
NSNotificationCenter
Object
通知ハンドラー
Object
通知ハンドラー
Object
Object
通知を伝達
通知を送信
- postNotification:
伝達を要請
伝達を要請
- addObserver:
selector:
name:
object:
A. 伝達を要請
B. 通知を送信
C. 通知を伝達
NSNotification
通知
▶ 通知は 名前 で区別される
▶ 通知元の オブジェクト が添えられる
▶ 任意の 追加情報 が付与されることも
通知
NSNotification
name: String
object: AnyObject?
userInfo: [NSObject : AnyObject]?
▶ NSApplicationWillTerminateNotification

アプリが終了するときに通知される
▶ ACAccountStoreDidChangeNotification

アカウントストアが変更されたときに通知される
▶ AVAudioSessionRouteChangeNotification

音声の出力先が変化したときに通知される
▶ NSWorkspaceWillSleepNotification

コンピューターがスリープするときに通知される
▶ kReachabilityChangedNotification

ネットワーク環境が変化したときに通知される
用意されている通知(ほんの1例)
通知
メリット的な特徴
通知センター
▶ 突如発生する状況変化に対応しやすい
▶ 各オブジェクトが自主的に対応可能
▶ 全体を把握して制御する負担を軽減
デメリット的な特徴
▶ 他オブジェクトと足並みを えにくい
▶ 誰が通知を受け取るか分からない
▶ 通知の発生場所を掴みにくい
使いどころ
通知センター
▶ 状況変化を受動的に受けたいときに使う
▶ 自発的な状況確認で充分なら使わない
▶ 伝えたい相手が明確なときは使わない
▶ 継続的な任務の遂行に使うと効果的
具体例
通知センター
メソッド
デリゲート
通知
Timeline View
Controller
SNS
Controller
View
Controller
Tweet Text
Tweet Button
NSApplication
内容の変更を報告
アカウントの検証
NSAppDelegate
ビューの表示
ボタンの有効化
自動更新の開始
最新データを取得
SNS の利用準備
スリープからの復帰を通知
自動更新の再開
最新データを取得
初期化を実行
起動完了を報告
変更内容を処理
自動更新の中断
スリープ状態へ移行を通知
通知センターを使う
ふたつの観点
通知センターを使う
A. OBSERVE … 通知の監視
B. POST … 通知の送信
OBSERVE
通知の監視
準備
OBSERVE
A. 通知を受け取るメソッドを準備
1. 通知センターを取得
2. 通知の伝達を要請
実施
始末
Z. 通知の伝達要請を解除
A. 通知を受け取るメソッドを準備
OBSERVE
▶ インスタンスメソッドで実装する
▶ 引数で NSNotification を受け取る
func sampleNotificationReceived(
notification: NSNotification) {
// ここに通知を受け取ったときの処理を書く
}
1. 通知センターを取得
OBSERVE
▶ NSNotificationCenter のメソッドで取得
▶ シングルトンなインスタンス
let notificationCenter =
NSNotificationCenter.defaultCenter()
2. 通知の伝達を要請
OBSERVE
▶ NSNotificationCenter に対して要請
▶ 伝達先のインスタンスとセレクタを渡す
notificationCenter.addObserver(
self,
selector: "sampleNotificationReceived:",
name: ESSampleNotification,
object: nil)
たとえば viewWillAppear で実行
Z. 通知の伝達要請を解除
OBSERVE
▶ NSNotificationCenter から登録解除
▶ 適切なタイミングで必ず実施すること
notificationCenter.removeObserver(
self,
name: ESSampleNotification,
object: nil)
たとえば viewWillDisappear で実行
まとめ
通知を監視する
NSNotificationCenterA Observer
addObserver:selector:name:object:
sampleNotificationReceived:
ESSampleNotification
ESSampleNotification
sampleNotificationReceived:
ESSampleNotification
removeObserver:name:object:
ESSampleNotification
POST
通知の送信
準備
POST
A. 通知の仕方を決める
1. 通知センターを取得
2. 通知を送信
実施
A. 通知の仕方を決める
POST
▶ 通知名を文字列で決める
▶ object で扱うものを決める

一般に 通知を送信したオブジェクト
▶ userInfo で扱うものを決める

完全に自由形式
通知
NSNotification
name: String
object: AnyObject?
userInfo: [NSObject : AnyObject]?
1. 通知センターを取得
POST
▶ NSNotificationCenter のメソッドで取得
▶ シングルトンなインスタンス
let notificationCenter =
NSNotificationCenter.defaultCenter()
2. 通知の送信
POST
▶ NSNotification を作る
▶ 通知センターに送信する
let notification = NSNotification(
name: ESSampleNotification,
object: self,
userInfo: nil)
notificationCenter
.postNotification(notification)
まとめ
通知を送信する
NSNotificationCenterAn Observer
sampleNotificationReceived:
ESSampleNotification
ESSampleNotification
postNotification:
An Object
An Observer
sampleNotificationReceived:
ESSampleNotification
気になったところ
in Swift
通知がどんな情報を持っているか判らない
気になったところ (1/5)
▶ 通知名は String 型

→ できれば型で扱いたい
▶ object は AnyObject? 型

→ 具体的な型で扱いたい
▶ userInfo は [NSObject : AnyObject]? 型

→ 型が不明瞭な上に自由度が高すぎる
通知
NSNotification
name: String
object: AnyObject?
userInfo: [NSObject : AnyObject]?
notificationCenter.addObserver(
self,
selector: "sampleNotificationReceived:",
name: ESSampleNotification,
object: nil)
通知を受けるメソッドの作成が必要
気になったところ (2/5)
▶ クロージャーを使いたい
▶ セレクターは使いたくない
let notificationCenter =
NSNotificationCenter.defaultCenter()
通知センターを都度取得する必要がある
気になったところ (3/5)
▶ 手続き的な事前準備をしたくない
▶ コードをもっとスリムに書きたい
notificationCenter.addObserver(
self,
selector: "sampleNotificationReceived:",
name: ESSampleNotification,
object: nil)
通知センター主体のコーディングになる
気になったところ (4/5)
▶ 通知センターを意識しないで書きたい
▶ Notification と Observer に着目したい
notificationCenter
.postNotification(notification)
notificationCenter.removeObserver(
self,
name: ESSampleNotification,
object: nil)
監視の解除を手動で実施しないといけない
気になったところ (5/5)
▶ 後始末が必要なのは原始的?
▶ 監視解除を書くのに煩わされたくない
これらを解消すると
どんなコードになるんだろう…
ESNotification
in Swift
https://github.com/EZ-NET/ESNotification
構想
ESNotification
▶ 通知は文字列ではなく型で区別
▶ 通知センターを意識せずに使える
▶ 通知時の処理をクロージャーで書ける
▶ 監視解除が自動で行われる
▶ 既存の通知センターと互換
https://github.com/EZ-NET/ESNotification
大まかな構成
ESNotification
Notification

Manager
An Notification

Object
Notification
class observeBy(_:handler:)
post
NSNotification

Center
_notificationHandlers
_rawNotificationObserver
NSNotification
ESNotification を使う
ESNotification
in Swift
POST
通知の送信
ESNotification
POST
ESNotification
従来
▶ 通知の仕方を決める
▶ 通知センターを取得
▶ 通知を送信
準備
A. 通知型を設計
1. 通知を送信
実施
class LocationChangedNotification
: Notification {
var x: Int
var y: Int
}
A. 通知型を設計
POST
▶ 名前の間違いや衝突をコンパイラで回避可能
▶ 扱う情報を明確に持てる
ESNotification
LocationChangedNotification(x:10, y:3).post()
1. 通知を送信
POST
▶ 通知センターの取得が不要
▶ 通知を主体に考えられる
ESNotification
OBSERVE
通知の監視
ESNotification
1. 目的の通知を監視
準備
なし
実施
OBSERVE
ESNotification
従来
▶ 通知を受け取るための

メソッドを準備
▶ 通知センターを取得
▶ 通知の伝達を要請
▶ 通知の伝達要請を解除
LocationChangedNotification
.observeBy(self) { notification in
}
1. 目的の通知を監視
▶ 通知時の処理をクロージャーで指定
▶ 文字列によるセレクター指定が不要
OBSERVE
ESNotification
RELEASE
監視の解除
ESNotification
監視の解除方針
RELEASE
▶ NotificationManager は

Observer を weak で管理
▶ Observer が解放されると

関連する監視を解除
▶ 明示的な監視解除も可能にする
ESNotification
let handle = LocationChangedNotification
.observeBy(self) { notification in
…
}
// 不要になったタイミングでハンドルをリリース
handle.release()
監視を明示的に解除する場合
RELEASE
▶ 監視登録時にハンドルを取得しておく
▶ ハンドルに対して release を実行する
ESNotification
NotificationManager.release(observer: self)
関連する監視を全て解除する場合
RELEASE
▶ NotificationManager を使う
▶ release メソッドに observer を渡す
ESNotification
通知センターとの互換性
compatibility
ESNotification
notificationCenter.addObserver(
self,
selector: "locationChangedNotificationReceived:",
name: LocationChangedNotification.notificationIdentifier,
object: nil)
func locationChangedNotificationReceived(n: NSNotification) {
let notification
= n.object as! LocationChangedNotification
}
通知型を通知センターで監視できる
通知センターとの互換性
▶ 通知名には notificationIdentifier を使う
▶ 受信した通知は object で渡される
ESNotification
NamedNotification.observe(
ESSampleLegacyNotification,
by: self) { notification in
}
名前付き通知を監視できる
▶ NamedNotification を監視する
▶ 通知センターからの通知も取得可能
通知センターとの互換性
ESNotification
NamedNotification(ESSampleNotification,
object: self, userInfo: nil).post()
名前付き通知を送信できる
通知センターとの互換性
▶ NamedNotification で送信する
▶ NSNotification と同等の通知ができる
ESNotification
LocationChangedNotification
.observeBy(self) { notice in
print("Location:(notice.x),(notice.y)")
}
送信
ESNotification
監視
ESNotification
LocationChangedNotification(x:10, y:3).post()
使い方のまとめ
もう少し手軽に使いたい
ESNotification
Observer を
暗黙的に指定したい
ESNotification
🤔
LocationChangedNotification
.observeBy( self ) { notification in
…
}
理由はここで self を指定することが多いから
▶ 既定の引数で self を指定する方法は?
▶ またはその代替案は?
Observer を暗黙指定したい
ESNotification
self を省略する手は
なさそう … 🙁
ESNotification
Observer を
主体にしてみる
ESNotification
protocol NotificationObservable : AnyObject {
}
A. Observable プロトコルを作成
▶ 通知監視できることを意味するプロトコル
▶ ここに通知監視に関する機能を備える
Observer を主体にする
ESNotification
extension NotificationObservable {
func observeNotificationNamed(
name: String,
handler:(NamedNotification)->Void) -> HandlerID
func observeNotification<T:NotificationProtocol>(
handler: (T) -> Void) -> HandlerID
func releaseObservingNotifications()
}
B. Observable に機能を実装
▶ 通知を監視するための機能をつける
▶ 任意のタイミングで監視解除も可能にする
Observer を主体にする
ESNotification
import ESNotification
extension ViewController : NotificationObservable {
}
C. 通知を監視可能にする
▶ NotificationObservable を適用する
▶ 通知監視に関する振る舞いが備わる
Observer を主体にする
ESNotification
self.observeNotification {
(notification: LocationChangedNotification) in
}
1. 通知を監視する
▶ 自身のメソッドを使って監視を開始
▶ 引数で監視する通知を指定
Observer を主体にする
ESNotification
self.releaseObservingNotifications
2. 通知監視を解除
▶ 自身のメソッドを使って監視を解除
▶ 自身が登録した監視すべてが解除される
Observer を主体にする
ESNotification
self.observeNotification {
(notice:LocationChangedNotification) in
print("Location:(notice.x),(notice.y)")
}
送信
Observer を主体にする
監視
ESNotification
LocationChangedNotification(x:10, y:3).post()
使い方のまとめ
Observer 主体だと
監視する通知を読み取りにくい
ESNotification
🤔
Notification 主体
監視する通知を読み取りにくい
Observer 主体
ESNotification
self.observeNotification { (notification: LocationChangedNotification ) in
}
LocationChangedNotification .observeBy(self) { notification in
}
ここまで読んで
やっと分かる
扱う通知が
すぐに分かる
通知型の登場位置による差異
やっぱり Notification 主体で
self を省略したい
self.observeNotification { (notification: LocationChangedNotification) in
}
LocationChangedNotification.observeBy(self) { notification in
}
ESNotification
でも実現方法が見つからない …
型の表記を
少し前に持ってきてみる
ESNotification
extension NotificationObservable {
func observeNotification<T:NotificationProtocol>(
handler: (T) -> Void) -> HandlerID
func observeNotification<T:NotificationProtocol>(
_ : T.Type,
handler: (T) -> Void) -> HandlerID
}
型情報を引数で指定
▶ 型情報を引数で渡す
▶ ただし引数の型情報は使わない
型の表記を少し前に持ってくる
ESNotification
self.observeNotification { (notification: LocationChangedNotification ) in
}
型情報を引数にとらない場合
型の表記を少し前に持ってくる
型情報を引数にとる場合
ESNotification
self.observeNotification( LocationChangedNotification.self ) { notification in
}
ここでようやく
登場した通知型が
視覚的な差異
ほんの少しだけ
前に登場
self.observeNotification(
LocationChangedNotification.self) { notification in
}
構文的な特徴
型の表記を少し前に持ってくる
ESNotification
通知型が少し

前に登場
型推論で
省略できる
この self は
欲しくない …
使うとき
定義
func observeNotification<T:NotificationProtocol>(
_ : T.Type,
handler: (T) -> Void) -> HandlerID
}
こちらも self が
カッコわるい … 🙁
ESNotification
良い方法ありませんか?
スマートに self を省略したい
ESNotification
in Swift
使い方のまとめ
ESNotification
ESNotification in Swift
ESNotification
// 通知を定義する
final class SampleNotification : Notification {
}
class ViewController: NSViewController, NotificationObservable {
override func viewDidLoad() {
super.viewDidLoad()
// 通知を監視する
self.observeNotification { (notification: SampleNotification) in
print("(notification) received.")
}
}
@IBAction func sendNotification(sender:AnyObject?) {
// 通知を送信する
SampleNotification().post()
}
}
シンプルな使用例
ESNotification
in Objective-C
ESNotification
必要な機能の検討
ESNotification in Objective-C
▶ NSNotificationCenter を

Objective-C で使うのは違和感がない
▶ ESNotification の通知型を

Objective-C からも送信したい
ESNotification
NSNotificationCenter を拡張
通知に関する機能追加
▶ NSNotificationCenter に機能を追加
▶ 型拡張で直接実装
extension NSNotificationCenter {
func addObserver(observer: AnyObject,
selector: Selector,
ESNotification: NotificationProtocol.Type,
object: AnyObject?)
func removeObserver(observer: AnyObject,
ESNotification: NotificationProtocol.Type,
object: AnyObject?)
func postESNotification(notification: Postable)
} ESNotification
// Swift で定義する場合
class ESSampleNotification : NSObject, Notification {
}
// Objective-C で定義する場合
#import <ESNotification/ESNotification-Swift.h>
@interface ESSampleNotification : NSObject <ESNotification>
@end
Swift または Objective-C での定義方法
通知クラスを定義する
▶ Notification プロトコルに準拠させる
▶ Objective-C 互換クラスとして定義
ESNotification
NSNotificationCenter* notificationCenter
= [NSNotificationCenter defaultCenter];
ESObjCNotification* notification
= [[ESObjCNotification alloc] init];
[notificationCenter postESNotification:notification];
in Objective-C
通知を送信する
▶ 通知センターを使って送信
▶ 従来に近い送信方法(使うメソッドは異なる)
ESNotification
NSNotificationCenter* notificationCenter
= [NSNotificationCenter defaultCenter];
[notificationCenter
addObserver:self
selector:@selector(objcNotificationReceived:)
ESNotification:[ESObjCNotification class]
object:nil];
in Objective-C
▶ 監視対象を通知型で指定
▶ 従来に近い送信方法(使うメソッドは異なる)
通知を監視する
ESNotification
NSNotificationCenter* notificationCenter
= [NSNotificationCenter defaultCenter];
[notificationCenter
removeObserver:self
ESNotification:[ESObjCNotification class]
object:nil];
in Objective-C
▶ 慣例に倣い、通知解除を手動で実行
▶ 解除対象を通知型で指定
通知監視を解除する
ESNotification
in Objective-C
使い方のまとめ
ESNotification
ESNotification in Objective-C
#import <ESNotification/ESNotification-Swift.h>
// 通知を定義する
@interface ESSampleNotification : NSObject <ESNotification>
@end
@implementation ESSampleNotification
@end
// 通知を使う
@implementation ESViewController
- (void)sendNotificationAction:(id)sender
{
// 通知を送信する
NSNotificationCenter* notificationCenter
= [NSNotificationCenter defaultCenter];
ESSampleNotification* notification
= [[ESSampleNotification alloc] init];
[notificationCenter postESNotification:notification];
}
@end
シンプルな送信例
ESNotification
ESNotification in Objective-C
#import <ESNotification/ESNotification-Swift.h>
@implementation ESViewController
- (void)objcNotificationReceived:(NSNotification*)notification
{
ESSampleNotification* notice = notification.object;
}
- (void)viewWillAppear
{
[super viewWillAppear];
NSNotificationCenter* notificationCenter = [NSNotificationCenter defaultCenter];
[notificationCenter addObserver:self
selector:@selector(objcNotificationReceived:)
ESNotification:[ESSampleNotification class]
object:nil];
}
}
- (void)viewWillDisappear
{
[super viewWillDisappear];
NSNotificationCenter* notificationCenter = [NSNotificationCenter defaultCenter];
[notificationCenter removeObserver:self
ESNotification:[ESSampleNotification class]
object:nil];
}
@end
シンプルな監視例
ESNotification
ESNotification
in Swift & Objective-C
https://github.com/EZ-NET/ESNotification
まとめ
NSNotification in Swift
▶ NSNotification 概要
▶ もっと気軽に使いたい
ESNotification in Swift
Swift みたいに気軽に使えるように
▶ Objective-C でも使いたい
ESNotification in Objective-C
従来と同じ感覚で使えるように
https://github.com/EZ-NET/ESNotification

Contenu connexe

Tendances

Swift 3 その基本ルールを眺める #cswift
Swift 3 その基本ルールを眺める #cswiftSwift 3 その基本ルールを眺める #cswift
Swift 3 その基本ルールを眺める #cswiftTomohiro Kumagai
 
Swift の可変値と不変値 〜 前回の続き(おまけ)〜 #cocoa_kansai
Swift の可変値と不変値 〜 前回の続き(おまけ)〜 #cocoa_kansaiSwift の可変値と不変値 〜 前回の続き(おまけ)〜 #cocoa_kansai
Swift の可変値と不変値 〜 前回の続き(おまけ)〜 #cocoa_kansaiTomohiro Kumagai
 
Swift の可変値と不変値 #cocoa_kansai
Swift の可変値と不変値 #cocoa_kansaiSwift の可変値と不変値 #cocoa_kansai
Swift の可変値と不変値 #cocoa_kansaiTomohiro Kumagai
 
プロトコル指向に想う世界観 #__swift__
プロトコル指向に想う世界観 #__swift__プロトコル指向に想う世界観 #__swift__
プロトコル指向に想う世界観 #__swift__Tomohiro Kumagai
 
iOS 8/Swift 概要 #ios8yahoo
iOS 8/Swift 概要 #ios8yahooiOS 8/Swift 概要 #ios8yahoo
iOS 8/Swift 概要 #ios8yahooHiramatsu Ryosuke
 
リテラルと型の続きの話 #__swift__
リテラルと型の続きの話 #__swift__リテラルと型の続きの話 #__swift__
リテラルと型の続きの話 #__swift__Tomohiro Kumagai
 
リテラルと型の話 #__swift__
リテラルと型の話 #__swift__リテラルと型の話 #__swift__
リテラルと型の話 #__swift__Tomohiro Kumagai
 
Xcode 6の新機能
Xcode 6の新機能Xcode 6の新機能
Xcode 6の新機能Shingo Sato
 
lazy var の特徴を知る #cocoa_kansai #cswift
lazy var の特徴を知る #cocoa_kansai #cswiftlazy var の特徴を知る #cocoa_kansai #cswift
lazy var の特徴を知る #cocoa_kansai #cswiftTomohiro Kumagai
 
Xcode グループとフォルダー参照 #yhios
Xcode グループとフォルダー参照 #yhiosXcode グループとフォルダー参照 #yhios
Xcode グループとフォルダー参照 #yhiosTomohiro Kumagai
 
Xcodeを便利に使って爆速開発する #yxcm
Xcodeを便利に使って爆速開発する #yxcm Xcodeを便利に使って爆速開発する #yxcm
Xcodeを便利に使って爆速開発する #yxcm Hiramatsu Ryosuke
 
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahooもしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahooniwatako
 
OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門irix_jp
 
SwiftでSioriを開発した体験記
SwiftでSioriを開発した体験記SwiftでSioriを開発した体験記
SwiftでSioriを開発した体験記yohei sugigami
 
Swift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswiftSwift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswiftTomohiro Kumagai
 
Swiftからlibuvを呼び出すTIPS
Swiftからlibuvを呼び出すTIPSSwiftからlibuvを呼び出すTIPS
Swiftからlibuvを呼び出すTIPSjugemjugemjugem
 
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
 

Tendances (20)

Swift 3 その基本ルールを眺める #cswift
Swift 3 その基本ルールを眺める #cswiftSwift 3 その基本ルールを眺める #cswift
Swift 3 その基本ルールを眺める #cswift
 
Swift の可変値と不変値 〜 前回の続き(おまけ)〜 #cocoa_kansai
Swift の可変値と不変値 〜 前回の続き(おまけ)〜 #cocoa_kansaiSwift の可変値と不変値 〜 前回の続き(おまけ)〜 #cocoa_kansai
Swift の可変値と不変値 〜 前回の続き(おまけ)〜 #cocoa_kansai
 
Swift の可変値と不変値 #cocoa_kansai
Swift の可変値と不変値 #cocoa_kansaiSwift の可変値と不変値 #cocoa_kansai
Swift の可変値と不変値 #cocoa_kansai
 
Study Swift
Study Swift Study Swift
Study Swift
 
プロトコル指向に想う世界観 #__swift__
プロトコル指向に想う世界観 #__swift__プロトコル指向に想う世界観 #__swift__
プロトコル指向に想う世界観 #__swift__
 
iOS 8/Swift 概要 #ios8yahoo
iOS 8/Swift 概要 #ios8yahooiOS 8/Swift 概要 #ios8yahoo
iOS 8/Swift 概要 #ios8yahoo
 
リテラルと型の続きの話 #__swift__
リテラルと型の続きの話 #__swift__リテラルと型の続きの話 #__swift__
リテラルと型の続きの話 #__swift__
 
リテラルと型の話 #__swift__
リテラルと型の話 #__swift__リテラルと型の話 #__swift__
リテラルと型の話 #__swift__
 
Xcode 6の新機能
Xcode 6の新機能Xcode 6の新機能
Xcode 6の新機能
 
lazy var の特徴を知る #cocoa_kansai #cswift
lazy var の特徴を知る #cocoa_kansai #cswiftlazy var の特徴を知る #cocoa_kansai #cswift
lazy var の特徴を知る #cocoa_kansai #cswift
 
Xcode グループとフォルダー参照 #yhios
Xcode グループとフォルダー参照 #yhiosXcode グループとフォルダー参照 #yhios
Xcode グループとフォルダー参照 #yhios
 
Swift勉強会
Swift勉強会Swift勉強会
Swift勉強会
 
既存アプリのiOS8対応 #ios8yahoo
既存アプリのiOS8対応 #ios8yahoo既存アプリのiOS8対応 #ios8yahoo
既存アプリのiOS8対応 #ios8yahoo
 
Xcodeを便利に使って爆速開発する #yxcm
Xcodeを便利に使って爆速開発する #yxcm Xcodeを便利に使って爆速開発する #yxcm
Xcodeを便利に使って爆速開発する #yxcm
 
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahooもしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
 
OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門
 
SwiftでSioriを開発した体験記
SwiftでSioriを開発した体験記SwiftでSioriを開発した体験記
SwiftでSioriを開発した体験記
 
Swift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswiftSwift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswift
 
Swiftからlibuvを呼び出すTIPS
Swiftからlibuvを呼び出すTIPSSwiftからlibuvを呼び出すTIPS
Swiftからlibuvを呼び出すTIPS
 
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
 

Similaire à NSNotification in Swift #cocoa_kansai

How to MAKE HVC-C Protyping Application
How to MAKE HVC-C Protyping ApplicationHow to MAKE HVC-C Protyping Application
How to MAKE HVC-C Protyping ApplicationHirotaka Niisato
 
Interactive Application using Kinect and Android
Interactive Application using Kinect and AndroidInteractive Application using Kinect and Android
Interactive Application using Kinect and AndroidHirotaka Niisato
 
Unityの夕べ in Fukuoka
Unityの夕べ in FukuokaUnityの夕べ in Fukuoka
Unityの夕べ in FukuokaShinobu Izumi
 
Macでかんたんkinect by @yopita _
Macでかんたんkinect by @yopita _Macでかんたんkinect by @yopita _
Macでかんたんkinect by @yopita _Arika Yoshida
 
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All ThingsUnityTechnologiesJapan002
 
あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015
あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015
あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015CODE BLUE
 
Sencha touchのはじめかた
Sencha touchのはじめかたSencha touchのはじめかた
Sencha touchのはじめかたYuki Naotori
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Takako Miyagawa
 
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理Kouji Matsui
 
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。Daisuke Yamashita
 
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」Yoshiki Shibukawa
 
SwiftのOptionalを理解する
SwiftのOptionalを理解するSwiftのOptionalを理解する
SwiftのOptionalを理解する幸雄 村上
 
EnOcean-Alliance-Japan-20190412
EnOcean-Alliance-Japan-20190412EnOcean-Alliance-Japan-20190412
EnOcean-Alliance-Japan-20190412Atomu Hidaka
 
どこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティスどこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティス5mingame2
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of PythonTakanori Suzuki
 
iPhoneアプリ無料勉強会 vol3
iPhoneアプリ無料勉強会 vol3iPhoneアプリ無料勉強会 vol3
iPhoneアプリ無料勉強会 vol3codeal
 
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会Takayuki Shimizukawa
 
2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMFAtomu Hidaka
 

Similaire à NSNotification in Swift #cocoa_kansai (20)

How to MAKE HVC-C Protyping Application
How to MAKE HVC-C Protyping ApplicationHow to MAKE HVC-C Protyping Application
How to MAKE HVC-C Protyping Application
 
Interactive Application using Kinect and Android
Interactive Application using Kinect and AndroidInteractive Application using Kinect and Android
Interactive Application using Kinect and Android
 
Unityの夕べ in Fukuoka
Unityの夕べ in FukuokaUnityの夕べ in Fukuoka
Unityの夕べ in Fukuoka
 
Macでかんたんkinect by @yopita _
Macでかんたんkinect by @yopita _Macでかんたんkinect by @yopita _
Macでかんたんkinect by @yopita _
 
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
 
あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015
あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015
あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015
 
IoT ChatOps #IoTLT
IoT ChatOps #IoTLTIoT ChatOps #IoTLT
IoT ChatOps #IoTLT
 
Sencha touchのはじめかた
Sencha touchのはじめかたSencha touchのはじめかた
Sencha touchのはじめかた
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
 
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
 
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
 
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
 
Tizen native application
Tizen native applicationTizen native application
Tizen native application
 
SwiftのOptionalを理解する
SwiftのOptionalを理解するSwiftのOptionalを理解する
SwiftのOptionalを理解する
 
EnOcean-Alliance-Japan-20190412
EnOcean-Alliance-Japan-20190412EnOcean-Alliance-Japan-20190412
EnOcean-Alliance-Japan-20190412
 
どこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティスどこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティス
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
 
iPhoneアプリ無料勉強会 vol3
iPhoneアプリ無料勉強会 vol3iPhoneアプリ無料勉強会 vol3
iPhoneアプリ無料勉強会 vol3
 
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
 
2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF
 

Plus de 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
 

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

NSNotification in Swift #cocoa_kansai