我想访问从下面的方法发送的通知对象。
var currentTrack:MPMediaItem? {
get{
return playlist?.items[index]
}
set{
print(newValue?.title!)
//self.index = locateIndex(track: newValue!)
let notif = Notification.init(name: Playlist.SongChangedName, object:self)
NotificationCenter.default.post(notif)
}
}
通知名称定义为:
static let SongChangedName = Notification.Name("SongChangedNotification")
这是观察者:
override init() {
super.init()
NotificationCenter.default.addObserver(self,
selector: #selector(testSelector),
name: Playlist.SongChangedName, //Notification.Name("songChanged"),
object: nil)
}
这是它调用的方法:
func testSelector(notification:Notification){
queueNextTrack()
}
如何将通知对象传递给 testSelector?我知道它与 addObserver 方法的对象参数有关。
谢谢。
最佳答案
您现在可以通过不在通知、计时器等中使用选择器来完全摆脱您的问题。有新的基于 block 的 API 来替换目标选择器,例如
NotificationCenter.default.addObserver(forName: Playlist.SongChangedName, object: nil, queue: nil, using: { notification in
self.testSelector(testSelector)
})
在大多数情况下,您不需要访问 block 中的通知,因此您也可以这样做
func testSelector(){
queueNextTrack()
}
NotificationCenter.default.addObserver(forName: Playlist.SongChangedName, object: nil, queue: nil) { _ in
self.testSelector()
}
或者在大多数情况下我最喜欢的:
override init() {
super.init()
let testBlock: (Notification) -> Void = {
self.queueNextTrack()
}
NotificationCenter.default.addObserver(forName: Playlist.SongChangedName, object: nil, queue: nil, using: testBlock)
}
编辑我还建议您查看此 API 描述中的示例代码
关于ios - 如何将通知传递给 Swift 3 中观察者调用的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38836952/