我已经尝试过查看其他StackOverflow对此的询问,我似乎无法找到解决方案。我不确定这是否是由于我查看非Swift 2.0的线程。
我需要NSNotification将任何类型的值传递给我的主视图控制器。但我一直在:
Optional(foobar)
这是视图控制器B上的一个功能:
func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
let notificationName = "CoreLocationNSN"
let notification = NSNotification(name: notificationName, object: self, userInfo: ["doge":"foobar"])
NSNotificationCenter.defaultCenter().postNotification(notification)
}
这是我的主要View Controller初始化函数:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
NSNotificationCenter.defaultCenter().addObserver(self, selector: "testNSNWithObject:", name: CoreLocationNSN, object: nil)
}
func testNSNWithObject(notification: NSNotification) {
print("Printing...")
print(String(notification.userInfo!["doge"]))
print(String(notification.userInfo?["doge"]))
print(notification.userInfo!["doge"])
print(notification.userInfo?["doge"])
}
但是,这是我的输出:
Printing...
Optional(foobar)
Optional(foobar)
Optional(foobar)
Optional(foobar)
答案 0 :(得分:3)
您只需打开String
func testNSNWithObject(notification: NSNotification) {
if let dodge = notification.userInfo?["dodge"] as? String {
print(dodge)
}
}
我建议您避免使用强制解包操作符
!
,因为它很危险,并且Swift中有几种更安全的解决方案。
答案 1 :(得分:-1)
我已经解决了,看起来可以通过添加来解开!最后,出于某种原因,我认为我的编译器因为这样做而大喊大叫:
func testNSNWithObject(notification: NSNotification) {
print("Printing...")
print(String(notification.userInfo!["doge"]))
print(String(notification.userInfo?["doge"]))
print(notification.userInfo!["doge"]!) // <<-- THIS ONE WORKED!
print(notification.userInfo?["doge"]!)
}
这是为了保留这个,因为这个问题在过去对我来说很麻烦,语法似乎很奇怪。
有没有人知道我还能做些什么而不是从字符串中删除“Optional()”?