2016-04-21 82 views
0

枚舉和陣列我已經宣佈枚舉使用雨燕

enum MenuItem { 
    case Item(String, Bool) 
} 

我有這樣的數組枚舉

let menuList = [ 
    MenuItem.Item("Title_1", true), 
    MenuItem.Item("Title_2", false), 
    MenuItem.Item("Title_3", true), 

] 

現在,從上面的陣列如何獲取字符串數組?

["Title_1", "Title_2", "Title_3"] 
+0

我不確定枚舉是不是最好的選擇,我認爲有兩個變量的結構會更好。 – EmilioPelaez

回答

2

如果你只是想從你的陣列篩選出Item案件,並得到了弦從它們的相關值的數組,你可以使用flatMappattern matching實現這一目標。例如:

// your array of enums 
let menuList = [ 
    MenuItem.Item("Title_1", true), 
    MenuItem.Item("Title_2", false), 
    MenuItem.Item("Title_3", true), 
] 

let arrayOfStrings:[String] = menuList.flatMap { 

    // if the element is of case .Item, return its string from the associated value 
    if case .Item(let str, _) = $0 {return str} 

    // else return nil (flatMap will filter out nil from the resultant array) 
    return nil 
} 

print(arrayOfStrings) // ["Title_1", "Title_2", "Title_3"] 

雖然我不得不質疑你在這裏使用枚舉。如果它只有一個case,那麼struct會更合適(我不確定是否爲了這個問題簡化了它)。