2014-11-06 27 views
0

這就是我想要的:功能與選項參數,或者使用一個空的字典作爲默認的參數

在迅速的函數,可以採取一個可選的參數,所以下面的調用函數myFunc將都工作得不錯:

// assume we have a Dictionary like this 
let dict=["key":"value"] 

myFunc() 
myFunc(dict) 

功能myFunc是這樣的:

任何字典傳遞到myFunc在裏面myFunc合併字典。如果沒有字典被傳入myFunc,則myFunc內的字典將按原樣使用。


這就是我想在Swift中實現的。這是我一直在做的事情:

看來,你不能完全省略參數,但在閱讀了一些關於我一直在尋找默認參數。我希望參數的類型是Dictionary,但是如果沒有指定參數,那麼我什麼也不需要,或者至少是一個空的Dictionary。我宣佈一個空的字典,像這樣:

let emptyDict = Dictionary<String,String>() 

然後我宣佈我的功能有一個默認的參數,像這樣:

func myFunc(paramDict:Dictionary = emptyDict){ ... } 

這給了我下面的錯誤:

Reference to generic type 'Dictionary' requires arguments in <...> 

我假設它在抱怨,因爲我使用空字典作爲參數。

任何人都可以告訴我如何在Swift中構建一個函數,它可以像我想myFunc那樣工作嗎?

+0

你可以嘗試(我沒有與我對不起我的mac)func myFunc(paramDict:Dictionary ...)或func myFunc(paramDict:Dictionaray?= nil) – 2014-11-06 15:02:16

回答

3

您必須指定函數參數的泛型類型:

func myFunc(paramDict:Dictionary<String, String> = emptyDict) { } 
           ^^^^^^^^^^^^^^^^ 

請注意,您並不需要定義一個變量來指定默認值 - 只是這樣做:

func myFunc(paramDict:Dictionary<String, String> = [:]) { } 

此外,如果函數的主體具有「如果提供字典,請執行此操作」,則可能需要考慮使用可選項:

func myFunc(paramDict:Dictionary<String, String>? = nil) { } 

它更具表現力,代碼在我看來更具可讀性。

+0

是的,我更喜歡使用Optionals (偉大的語言特色imho),我會沿着這條路線走下去。非常感謝! – Jimmery 2014-11-06 15:24:28