如何剿从斯威夫特
让我们考虑,我们有一个闭合状:(用作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并忽略其余行,因为NSDictionary
的setValue
的返回类型为Void
。我的问题是,有没有办法抑制这种行为?
我用你的代码重新创建了你的例子(只需稍作调整),并没有你描述的问题。尽管我使用了一个快速字典,因为我对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
可能是它的原因,也许是别的原因造成的回归?
您遇到此问题是因为您正在创建一个不可变的NSDictionary
。你需要使用NSMutableDictionary
来做到这一点。
我的代码:
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)")
}
})
谢谢你,你救了我,这是我愚蠢的错误。 .....但我很困惑,为什么它不给运行时错误... –
@MAbdulSami这是你的问题的答案,但你应该检查什么阻止你使用Swift类型。它更好地集成在Swift本身,通过支持下标等。 – vrwim
我只是有点害怕使用它们,但现在我害怕使用NS对象:D –
目前我靠这个: VAR ret_consume = data.setValue( “数据1”,forKey: “数据1”) –
尝试把这些4行中括号{}。 – Amit89
@Amit89这会导致编译时错误....表达式在没有任何上下文的情况下不明确 –