Search code examples
arraysswiftnsobject

Inserting NSObjects to static Array Swift [Shortcut]


Am really like to think of shortcut codes to do the workspace as a piece of cake and am not expert with Swift so there is any shortcut way for below code/scenario

let Item1 = MenuItem()
Item1.titleEn = "item 1"
let Item2 = MenuItem()
Item2.titleEn = "item 2"
let Item3 = MenuItem()
Item3.titleEn = "item 3"
let Item4 = MenuItem()
Item4.titleEn = "item 4"
let Item5 = MenuItem()
Item5.titleEn = "item 5"
let Item6 = MenuItem()
Item6.titleEn = "item 6"
self.items.append(Item1)
self.items.append(Item2)
self.items.append(Item3)
self.items.append(Item4)
self.items.append(Item5)
self.items.append(Item6)

Solution

  • Add an initializer to MenuItem to pass the title

    class MenuItem {
        let title : String
        init(title: String) { self.title = title }
    }
    

    then use an array of the titles and map them

    var items = [MenuItem]()
    
    let titles = ["item 1", "item 2", "item 3", "item 4", "item 5", "item 6"]
    let menuItems = titles.map { MenuItem(title: $0) }
    items.append(contentsOf: menuItems)
    

    For two items use a tuple

    class MenuItem {
        let title : String
        let icon : String
        init(title: String, icon: String) { self.title = title; self.icon = icon }
    }
    
    var items = [MenuItem]()
    
    let titles = [("item 1", "icon 1"), ("item 2", "icon 2"), ("item 3", "icon 3"), ("item 4", "icon 4"), ("item 5", "icon 5"), ("item 6", "icon 6")]
    let menuItems = titles.map { MenuItem(title: $0.0, icon: $0.1) }
    items.append(contentsOf: menuItems)
    

    Note:

    In most cases it's sufficient to use a struct. The benefit is you get the initializer for free

    struct MenuItem {
        let title : String
        let icon : String
    }