0

I have a custom class like:

 class Tender: NSObject {
     public var code = ""
     public var name = ""
 }

A method returns an array of Tender type. From this array, I want to prepare an array that contains only name. Example,

 public func fetchTenderArray() -> [Tender] {
      var tenderArray = [Tender]()
      let tender1 = Tender()
      tender1.code = "t1"
      tender1.name = "tenderName1"
      let tender2 = Tender()
      tender2.code = "t2"
      tender2.name = "tenderName2"
      tenderArray.append(tender1)
      tenderArray.append(tender2)
      return tenderArray
 }

Now, I have a method that uses this tenderArray. I need to form an array with the names of [Tender].

 public func formTenderNamesArray() -> [String] {
      let tenderArray = fetchTenderArray()
      var tenderNames = [String]()
      for tender in tenderArray {
           tenderNames.append(tender.name)
      }
      return tenderNames    // returns ["tenderName1","tenderName2"]
 }

Is there a short and a best way to prepare that array of strings using swift3?

1
  • Ever thought of using a hashmap or dictionary for storing the code (=key) and name (=value)? Commented Aug 2, 2017 at 7:51

2 Answers 2

1

Try using map functionality,

it should be something like this.

let tenderArray = fetchTenderArray()
let tenderNames = tenderArray.map {$0.name}

For more information please see this link.

https://useyourloaf.com/blog/swift-guide-to-map-filter-reduce/

Sign up to request clarification or add additional context in comments.

Comments

0

//Try this

public func formTenderNamesArray() -> [String] {
    let tenderArray = fetchTenderArray()
    var tenderNames = (tenderArray as! NSArray).value(forKey: "name") as! [String]
    return tenderNames
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.