読者です 読者をやめる 読者になる 読者になる

Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

Swiftで遊ぼう! - 710 - Notification.Name...

Swift 3βになりAPI利用に大きな変更が加わっていると思います。私の知識も増えてきているので気がつくようになったと言う方が正しいかもしれません。

以前勉強をしたことをSwift 3で考え直しています。

デザイン・パターンの1つ、Notificationの中核をなすNSNotificationCenterクラスが無くなりました。シングルトン・パターンで動かすNSNotificationCenter.defaultCenter()の代わりは次のようにシンプルになりました。

NotificationCenter.default()
// 新しく変更になった通知センターです。

ここに通知したいメッセージを登録します。「post」メソッドを使ってNotificationを登録するのですが、この登録するNotificationはString型の文字列でした。「stringly-typed」 (strongly-typedから作られた造語で、データ構造の代わりに String型を使ったコードで、醜いけど強固なデータ型という意味あいのようです。これがSwift 3でよりOOPらしい、struct型の「wrapper types」(オブジェクトとして包み込んだタイプ)に変更があったようです。新しい「Notification.Name」型が用意されました。

従って、Notificationは次の様にstaticなstruct型としてどこか決まった場所で宣言するといいようです。

static let MyGreatNotification =
            Notification.Name("MyGreatNotification")

そしてこのNotificationをNotificationCenterからブロードキャスト(通知)できるように登録すればいいんです。

NotificationCenter.default().post(
             name: MyController.MyGreatNotification, 
           object: self)

シンプルになったのか、複雑になったのか私には分かりませんが、この作法で書かないとNotificationは動きません。

参考サイト:Swift.org - Migrating to Swift 2.3 or Swift 3 from Swift 2.2

今日はこれだけ。