WonderX
WonderX

Reputation: 95

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)

Upvotes: 0

Views: 183

Answers (2)

vadian
vadian

Reputation: 285072

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
}

Upvotes: 3

Ahmad F
Ahmad F

Reputation: 31645

Simply, do it in for in loop:

func appendItem(_ title: String) {
    var item = MenuItem()
    item.titleEn = title

    items.append(item)
}

var items = [MenuItem]()

for i in 0...5 {
    appendItem("Item \(i+1)")
}

dump(items)

/*
 6 elements
 ▿ __lldb_expr_48.MenuItem
 ▿ titleEn: Optional("Item 1")
 - some: "Item 1"
 ▿ __lldb_expr_48.MenuItem
 ▿ titleEn: Optional("Item 2")
 - some: "Item 2"
 ▿ __lldb_expr_48.MenuItem
 ▿ titleEn: Optional("Item 3")
 - some: "Item 3"
 ▿ __lldb_expr_48.MenuItem
 ▿ titleEn: Optional("Item 4")
 - some: "Item 4"
 ▿ __lldb_expr_48.MenuItem
 ▿ titleEn: Optional("Item 5")
 - some: "Item 5"
 ▿ __lldb_expr_48.MenuItem
 ▿ titleEn: Optional("Item 6")
 - some: "Item 6"
 */

Upvotes: 0

Related Questions