gpt4 book ai didi

ios - 如何将通知传递给 Swift 3 中观察者调用的方法

转载 作者:行者123 更新时间:2023-11-28 06:37:23 24 4
gpt4 key购买 nike

我想访问从下面的方法发送的通知对象。

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com