如何使用通知将字符串数据从 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 获取通知中心数据