Objective-C 观察者 - 如何在 Swift 中使用
Posted
技术标签:
【中文标题】Objective-C 观察者 - 如何在 Swift 中使用【英文标题】:Objective-C observer - how to use in Swift 【发布时间】:2017-02-03 08:25:09 【问题描述】:我正在向 Objective-C 应用程序添加使用 Swift 的新功能。
我在 Objective-C (registration.m) 中有这个观察者:
[[NSNotificationCenter defaultCenter] removeObserver:self name:NOTIFICATION_SERVER_SENT_CONFIRMATION_SMS object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(confirmSms) name:NOTIFICATION_SERVER_SENT_CONFIRMATION_SMS object:nil];
在confirm.m中:
[[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_SERVER_SENT_CONFIRMATION_SMS object:nil];
如何在 Swift 中观察到这一点?我试过了
NotificationCenter.default.removeObserver(self,
name: NOTIFICATION_SERVER_SENT_CONFIRMATION_SMS,
object:nil);
NotificationCenter.default.addObserver(self,
selector:#selector(self.confirmationSmsSent),
name: NOTIFICATION_SERVER_SENT_CONFIRMATION_SMS,
object: nil);
我得到了
使用未解析的标识符 'NOTIFICATION_SERVER_SENT_CONFIRMATION_SMS'
谢谢
// 编辑:
我已经在 Obj-C 中声明了:
NSString *const NOTIFICATION_SERVER_SENT_CONFIRMATION_SMS = @"confirmationSMSSent";
这还能用吗?
let name: NSNotification.Name = NSNotification.Name("Your_Notification_Name_Key_String") //NOTIFICATION_SERVER_SENT_CONFIRMATION_SMS
当我使用
NotificationCenter.default.addObserver(self, selector:#selector(self.confirmationSmsSent(_:)), name: name, object: nil)
func confirmationSmsSent(notification: NSNotification)
我有错误
“MyController”类型的值没有成员“confirmationSmsSent”
在
NotificationCenter.default.addObserver(self, selector:#selector(self.confirmationSmsSent(_:)), name: name, object: nil)
【问题讨论】:
***.com/questions/36910965/… 在女巫文件中你声明了 NOTIFICATION_SERVER_SENT_CONFIRMATION_SMS 变量? 【参考方案1】:在 Swift 3 中,语法发生了变化。你必须定义NSNotification.Name
的变量
let name: NSNotification.Name = NSNotification.Name("Your_Notification_Name_Key_String") //NOTIFICATION_SERVER_SENT_CONFIRMATION_SMS
//Add Notification
NotificationCenter.default.addObserver(self, selector:#selector(self.yourSelector(_:)), name: name, object: nil)
//Remove Notification Observer
NotificationCenter.default.removeObserver(self, name: name, object: nil)
//Your Selector
func yourSelector(_ notification: Notification)
//Code
【讨论】:
和 self.yourSelector(_:) 应该定义为 func yourSelector()? () 中的参数应该是什么?在 func ConfirmationSmsSent(notification: NSNotification) 我遇到选择器错误 “MyController”类型的值没有成员“confirmationSmsSent” @sohil-r-memon 谢谢!【参考方案2】:这是因为您尚未声明 NOTIFICATION_SERVER_SENT_CONFIRMATION_SMS。
通常通知名称只是一个字符串,顺便说一句,您必须将其转换为嵌套的 NSNotification.Name 类型。
let NOTIFICATION_SERVER_SENT_CONFIRMATION_SMS = NSNotification.Name("<some string>")
【讨论】:
【参考方案3】:最有用的swift-lije代码是扩展
extension Notification.Name
static let someNewName = "ThatsItImAwsome"
帖子内使用:
.someNewKey
这个:
NotificationCenter.default.addObserver(self, selector:#selector(self.yourSelector(_:)), name: .someNewKey, object: nil)
【讨论】:
以上是关于Objective-C 观察者 - 如何在 Swift 中使用的主要内容,如果未能解决你的问题,请参考以下文章