2015-05-11 37 views
2
返回类型为void封闭隐含回报

让我们考虑,我们有一个闭合状:(用作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并忽略其余行,因为NSDictionarysetValue的返回类型为Void。我的问题是,有没有办法抑制这种行为?

+0

目前我靠这个: VAR ret_consume = data.setValue( “数据1”,forKey: “数据1”) –

+0

尝试把这些4行中括号{}。 – Amit89

+0

@Amit89这会导致编译时错误....表达式在没有任何上下文的情况下不明确 –

回答

0

我用你的代码重新创建了你的例子(只需稍作调整),并没有你描述的问题。尽管我使用了一个快速字典,因为我对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可能是它的原因,也许是别的原因造成的回归?

+0

您在这里错过了整个观点。你在做任务。尝试创建一个返回Void的函数,然后通过像doAssign(data,key,value)这样的函数替换步骤1,2,3的赋值,然后看看会发生什么....... –

+0

嗯,我基本上只是用你的码。不知道有什么区别。我会稍后再研究一下。 – Eendje

+1

第一个数据出现第二个,因为无法订购dicctionary。 – Kutyel

0

您遇到此问题是因为您正在创建一个不可变的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)") 
    } 
}) 
+0

谢谢你,你救了我,这是我愚蠢的错误。 .....但我很困惑,为什么它不给运行时错误... –

+1

@MAbdulSami这是你的问题的答案,但你应该检查什么阻止你使用Swift类型。它更好地集成在Swift本身,通过支持下标等。 – vrwim

+0

我只是有点害怕使用它们,但现在我害怕使用NS对象:D –