如何使用通知将字符串数据从 swift 传递到目标 c 类

Posted

技术标签:

【中文标题】如何使用通知将字符串数据从 swift 传递到目标 c 类【英文标题】:how to pass string data from swift to objective c class using notification 【发布时间】:2017-10-12 05:02:16 【问题描述】:

我想将表格单元格文本标签数据从 swift 类传递到目标 c 类。在 swift 类中,我做了以下操作,

class NewsViewController: UIViewController, UITableViewDataSource, UITableViewDelegate 
@IBOutlet weak var newsTableView: UITableView!

var myVC:NewsDetailsViewController!


func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
    tableView.deselectRow(at: indexPath, animated: true)
    print("selected index :",indexPath.row)

    let selectedCell = tableView.cellForRow(at: indexPath)
    print("did select and the text is \(selectedCell?.textLabel?.text)")
    myVC.passedValue = selectedCell?.textLabel?.text
    print("text label value: ", myVC.passedValue)
    NotificationCenter.default.post(name: NSNotification.Name(rawValue: "PostQuestion"), object: myVC.passedValue)
    self.present(myVC, animated: true , completion: nil)


现在我想用我的另一个控制器接收这个字符串数据,它是一个目标 c 类。请指导。

【问题讨论】:

如果可能,则使用prepareForSegue 方法传递字符串数据,否则您可以使用NSUserDefaults 我没有使用任何 segue 并且 NSUserDefaults 在我的项目中受到限制。所以我想在通知中心。 您应该使用userInfo 字典来传递数据,并使用self(发送者)作为object 的参数。 myVC.passedValue 是正确的值还是不应该使用 myVC.passedValue myVC.passedValue?是正确的。会更新。您能否发布一些相同的代码示例? @NiravKotecha:NSUserDefaults 不适用于控制器间通信。通知是正确的方式。 【参考方案1】:

您应该发送通知

NotificationCenter.default.post(name: NSNotification.Name(rawValue: "PostQuestion"), 
    object: self,
    userInfo: ["value": myValue] as Dictionary<AnyHashable, Any>)

并用类似的东西处理通知

func processNotification(notification: NSNotification) 
    let userInfo = notifcation.userInfo

    if let value = userInfo?["value"] as? String 
        ...
    

或在 Objective-C 中相同

- (void)processNotification:(NSNotification *)notification 
    NSString *value = [notifcation.userInfo objectForKey:@"value"]

    if(value) 
        ...
    

【讨论】:

如何在我的目标 c 类中接收它? 发送数据时不需要这个processNotification方法名吗? 不,当然不是。您可以使用(几乎)任何您喜欢的名称。只有签名必须保持不变。 NSString *value = notifcation.userInfo[@"value"];...obj c 类中的错误,如数组下标不是整数。 您可以改用objectForKey:

以上是关于如何使用通知将字符串数据从 swift 传递到目标 c 类的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从应用程序显示到Today Extension Swift

如何在 swift 4 上从 didFinishLaunchingWithOptions 获取通知中心数据

消息传递服务器如何识别目标客户端并发送推送通知

Swift - 将数据从父视图控制器传递到子视图控制器

如何将回调对象从 Swift 传递到 Objective C 类并用作回调?

将 iOS 事件传递给 Ionic/Capacitor webview