addObserver(_:selector:name:object:)
とpost(name:object:userInfo:)
の両方のメソッドには、「オブジェクト」パラメータが含まれています。対応する文書は、オブザーバが受信したい通知、すなわちこの送信者によって送信された通知のみがオブザーバに配信されるオブジェクト、および[ "これらの記述は、オブジェクト "パラメータ"がnilに設定されていなければ、post()
メソッドが呼び出されたものと同じオブジェクトでなければならないという印象を与えてくれます。iOS通知 - オブジェクトパラメータを任意のオブジェクトにすることはできますか?
しかし、実際には、post()
メソッドは任意のオブジェクトをそのオブジェクトパラメータとして含めることができるように見えます。同時に、任意のオブジェクトでaddObserver()
メソッドを設定することができます。したがって、post()
とaddObserver()
のメソッドが同じ任意のオブジェクト(同じNotification.Name)を参照する場合、それらは送受信するように機能するはずです。実験では、これは正常に動作するようです。
次の例では、Observerは送信者からの特定の通知を任意に受信するように登録します。しかし、店は通知を掲示するものです。通知を送信する際、Storeには「送信者」であるオブジェクトと同じ瞬間が含まれます。オブザーバーは通知を受け取ります。これは、Storeが任意ではなく、通知の「送信者」であっても機能します。
class ArbitraryData {
var data: [String] = ["some handy info"]
func getMoreInfo() {
Store.aSyncReadData(self)
}
}
class Observer {
let arbitrary = ArbitraryData()
func initiate() {
NotificationCenter.default.addObserver(self, selector: #selector(handleNotice),
name: NSNotification.Name(rawValue: "eventHappenedNotice"),
object: arbitrary)
... do stuff ...
arbitrary.getMoreInfo()
}
func handleNotice(notice: Notification) {
for infoItem in arbitrary.data {
print(infoItem)
}
}
}
class Store {
static func aSyncReadData(dataObject: ArbitraryData) {
ServerAPI.getSomeDataFromPersistentStore(completionHandler: { newData in
dataObject.data.append(newData)
NotificationCenter.default.post(NSNotification.Name(rawValue: "eventHappenedNotice"),
object: dataObject)
})
}
}
目的の機能の任意のオブジェクト部分をこのように使用されており、それは安全なのですか?または、後でデバッグするのが難しいかもしれない何らかの障害につながる可能性のある任意のオブジェクトを使用していますか?
@MuseerAnsari - 編集をありがとうございます。私はスタイルガイドをより緊密に進めるように努力します。 –