如何在 Swift 中使用 Void return 类型的闭包抑制隐式 return
How to Supress implicit return from a closure with Void return type in Swift
让我们考虑一下我们有一个像这样的闭包:(用作 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 行 returns 并忽略剩余的行,因为 NSDictionary
的 setValue
的返回类型是 Void
。我的问题是,有没有办法抑制这种行为?
我用您的代码重新创建了您的示例(稍作调整),没有遇到您描述的问题。不过,我使用了 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
可能是它的原因,也许其他原因导致它 return?
您遇到这个问题是因为您正在创建一个 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)")
}
})
让我们考虑一下我们有一个像这样的闭包:(用作 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 行 returns 并忽略剩余的行,因为 NSDictionary
的 setValue
的返回类型是 Void
。我的问题是,有没有办法抑制这种行为?
我用您的代码重新创建了您的示例(稍作调整),没有遇到您描述的问题。不过,我使用了 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
可能是它的原因,也许其他原因导致它 return?
您遇到这个问题是因为您正在创建一个 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)")
}
})