質問: 1 NSNotificationCenter.defaultCenter().postNotificationName("test", object: obj, userInfo: nil) ``` 上記のようにしたことで通知は可能なのですが、 なぜUINT8は直接指定できないのか理解できておらず、この方法が正しいのかがわかりません...。 この方法は回りくどい、こうするのが通常手段...などなどありましたらご意見いただけないでしょうか。
回答: まずUInt8が使用できない理由ですが、エラーメッセージの通りで、「'UInt8'型の値は引数として期待されている'AnyObject?'型には変換できません」です。 `AnyObject`(または`AnyObject?`)に変換可能な数値型は限られていて、こちらに記載があります。(ちなみに他にもあります。) Numbers 要は整数型だと`Int`と`UInt`だけが`NSNumber`に自動的に変換されて、それは`AnyObject`としても取り扱えますよ、ということです。(この自動変換が有効になるのは、(間接的にでも良いので)Foundationをimportしている時だけです。) 試しに`UInt8`を`Int`か`UInt`に変更して、元のコードをコンパイルしてみてください。 次に「こうするのが通常手段」の部分ですが、`postNotificationName(_:object:userInfo:)`メソッドのリファレンスでは、object引数のことをこう記載しています。 postNotificationName(_:object:userInfo:) *notificationSender The object posting the notification.* 「この通知を投函するオブジェクト」ってことですね。通常、通知の発行は何かしらのメソッドの実行中に行われるものと思いますので、よほどの例外的なことをしているので無い限りobject引数には必ず`self`を指定します。それ以外の何かの情報を伝えたいときにはuserInfoに渡すディクショナリーに適当なキーで値を入れておくわけです。ただしその場合でも、`UInt8`型の値は(`[NSObject: AnyObject]`型であるuserInfo)ディクショナリーには直接入れられませんが。