Objective-CからSwiftへの変換メモ その2
通知センター(Swift3.0以降)では、登録(addObserver)時の書き方がビックリなのでメモっておく。
Objective-Cだと
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
// Add observer for notification center
[notificationCenter addObserver:self
selector:@selector(didSendGameInfo:)
name:@"didSendGameInfo"
object:nil];
Swiftだと
let notificationCenter = NotificationCenter.default
// Add observer for notification center
notificationCenter.addObserver(self,
selector: #selector(self.didSendGameInfo),
name: NSNotification.Name(rawValue: "didSendGameInfo"),
object: nil)
selectorとnameが自動変換できなかった。しかもselectorで呼んでいるメソッドには@objcがいると言うおまけ付き。
加えてuserInfoの使い方に注意が要る。(型が<AnyHashable, Any>のため)
var userInfo:Dictionary<AnyHashable, Any> = [:] // ややこしいがこれはクラス内で共通に使う変数
@objc func didSendGameInfo(notification: Notification) {
self.userInfo = notification.userInfo! // セレクタで受け取って
}
func windowShouldClose(sender: AnyObject) -> Bool {
let theCommand = self.userInfo["theCommand"] as! String // 使うときにキャストする
}
少しづつ、型にうるさい言語だと言う気はしてきた。
この投稿へのトラックバック
トラックバックはありません。
- トラックバック URL
この投稿へのコメント