2016-02-13 28 views
0

我的最終目標是將所需的數組傳遞給函數。問題是數組名取決於情況。它可能是30個名字中的1個。調用數組其中名稱爲半字符串和半變量的數組:動態引用

我有大約30個名爲「default_SomeName」的數組。現在前面的VC傳遞了SomeName值。基於這個值,我的目標是將30個數組中的一個傳遞給一個函數。然而,動態引用顯然不容易。

我已經試過:

var someName: String! //Passed from presenting VC 
let desiredArray = "default_" + someName 
myFunction(desiredArray) 

,但我得到:

無法將類型的值 '串' 預期參數類型[字符串]

有誰知道如何去做這個?

+0

由於Swift的靜態特性,您只能通過使用NSObject的KVO方法離開Swift並轉到Obj-C和Foundation方法來實現類似的目的。既然你在Swift編碼,然而,我會反對這個建議。可能改變方法,而不是; 「傳遞VC」能傳遞一個簡單的整數引用嗎?在'1'和'30'之間說一個'Int',它對應於字符串數組中的索引,'[[String]]'(包含30個左右的'String'數組)。 – dfri

+1

你可以把數組放在一個字典中,然後你可以通過'name'(key)訪問所需的數組 – Paulw11

+0

@ Paulw11 - 這很有趣...所以我讓someName成爲鍵,數組返回的東西?我以前從未使用過字典,不用介意那樣的事情。如果你認爲它會起作用,你可以將它作爲答案嗎? –

回答

2

您可以使用字典將每個字典與其名稱相關聯。字典在蘋果斯威夫特書解釋,但一般你會做這樣的事情:

var dictionary=[String:[Int]]() 

dictionary["default_1234"]=[1,2,3,4] 
dictionary["default_5678"]=[5,6,7,8] 

let suffix="1234" 

print(dictionary["default_\(suffix)"]) 

在這種情況下,我使用了一個int數組,但你可以有任何數組類型

+0

我在評論中提到它後開始閱讀有關它們。所以你建議我宣佈一個空的,但設置類型。然後,逐個添加一個鍵和它應該引用的數組。最終,它將允許我像這樣傳遞所需的數組?:myFunction(dictionary [「SomeKeyName」]) –

+0

沒錯。它仍然看起來很笨重,但不知道更多關於你想要達到的目標,我無法提出任何其他建議。 – Paulw11

+0

var dictionary = [String:[String]]() dictionary [「Quote」] = defaultNames_Quote - 此代碼剛剛收到錯誤'Expected Declaration' - 也許我應該只使用switch語句?根據情況更改myFunction(desiredArray)? –

0

好吧,既然似乎沒有一個簡單的方法,我決定以一種明確的方式去做!

這個開關是最基本的。它採用someName,將其與一個大小寫相匹配,並且它們都運行相同的函數,但是隻針對該someName值的數組。

func passArrayToFunc() { 
    switch someName { 
    case "somename1": 
     funcThatNeedsArray(someArray1) 
    case "someName2": 
     funcThatNeedsArray(someArray2) 
    case "someName3": 
     funcThatNeedsArray(someArray3) 
    case "someName4": 
     funcThatNeedsArray(someArray4) 
    case "someName5": 
     funcThatNeedsArray(someArray5) 
    case "someName6": 
     funcThatNeedsArray(someArray6) 
    case "someName7": 
     funcThatNeedsArray(someArray7) 
    case "someName8": 
     funcThatNeedsArray(someArray8) 
    default: 
     print("No matches") 
    } 
相關問題