2015-05-11 59 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 –