2

让我们考虑一下我们有一个像这样的闭包:(用作completionHandler)

func doSomething (completionHandler : (done : Bool)->Void )->Void {
      ...
     completionHandler(true)
}

现在,如果我们想做这样的事情:

doSomething({ (done : Bool)-> Void
  var data : NSDictionary = NSDictionary()
  data.setValue("data1", forKey: "data1")   // 1
  data.setValue("data2", forKey: "data2")   // 2
  data.setValue("data3", forKey: "data3")   // 3
})

它在 // 1 行返回并忽略其余行,因为 of 的返回setValue类型NSDictionaryVoid。我的问题是,有没有办法抑制这种行为?

4

2 回答 2

0

我用您的代码(稍作调整)重新创建了您的示例,并且没有您描述的问题。不过,我使用的是 swift 字典,因为我对 Obj-C 一无所知。

func doSomething(completionHandler: Bool -> Void) {
    completionHandler(true)
}

doSomething() { finished in
    var data = [String: String]()
    data.updateValue("data1", forKey: "data1")  // 1
    data.updateValue("data2", forKey: "data2")  // 2
    data.updateValue("data3", forKey: "data3")  // 3

    for (key, value) in data {
        println("Key: \(key) & Value: \(value)")
    }
}

输出是:

Key: data2 & Value: data2
Key: data1 & Value: data1  // Not sure why data1 is second here
Key: data3 & Value: data3

我怀疑使用NSDictionary可能是它的原因,也许是其他原因导致它返回?

于 2015-05-11T03:18:10.220 回答
0

您遇到此问题是因为您正在创建一个NSDictionary不可变的 . 您需要使用 anNSMutableDictionary来执行此操作。

我的代码:

import Foundation

func doSomething (completionHandler: (done: Bool) -> Void ) -> Void {
    completionHandler(done: true)
}

doSomething({ (done: Bool) -> Void in
    var data: NSMutableDictionary = NSMutableDictionary()
    data.setValue("data1", forKey: "data1")   // 1
    data.setValue("data2", forKey: "data2")   // 2
    data.setValue("data3", forKey: "data3")   // 3

    for (key, value) in data {
        println("Key: \(key) & Value: \(value)")
    }
})
于 2015-05-11T07:17:35.077 回答