如何使用Swift 2.0处理字符串或任何其他值中的Optional()?

时间:2015-12-27 22:08:06

标签: swift optional

我已经尝试过查看其他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)

2 个答案:

答案 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()”?