Welcome to the Treehouse Community

The Treehouse Community is a meeting place for developers, designers, and programmers of all backgrounds and skill levels to get support. Collaborate here on code errors or bugs that you need feedback on, or asking for an extra set of eyes on your latest project. Join thousands of Treehouse students and alumni in the community today. (Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.)

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and a supportive community. Start your free trial today.

iOS Swift Collections and Control Flow Control Flow With Conditional Statements Working With Switch Statements

Cory Waldroup
Cory Waldroup
3,609 Points

Appending results to the appropriate array

I am getting an error stating that I am not appending the results of each case to the correct array, but in Playgrounds this code produces the correct results.

operators.swift
var europeanCapitals: [String] = []
var asianCapitals: [String] = []
var otherCapitals: [String] = []

let world = [
  "BEL": "Brussels", 
  "LIE": "Vaduz", 
  "BGR": "Sofia", 
  "USA": "Washington D.C.", 
  "MEX": "Mexico City", 
  "BRA": "Brasilia", 
  "IND": "New Delhi", 
  "VNM": "Hanoi"]

for (key, value) in world {
    switch key {
    case "BEL", "LIE", "BGR": europeanCapitals += [value]
    case "IND", "VNM": asianCapitals += [value]
    default: otherCapitals += [value]
    }
}

2 Answers

AJ Salmon
AJ Salmon
5,675 Points

Hey Cory! You're using the string concatenation operand (+), but the variables europeanCapitals, asianCapitals, and otherCapitals are not strings; they're arrays that contain strings. You can tell this because after the variables are declared, the type is explicitly defined. Because it says [String], in square brackets, it has to be an array. SO, instead of using + to try and concatenate non-existent strings, use the .append() method to add the value to the array. Hope this helps!

AJ

Cory Waldroup
Cory Waldroup
3,609 Points

Thanks, AJ. I suppose I thought that by placing value in square brackets I was making it a single entry array of type String and then adding it to the europeanCapitals array of type String. I am very surprised that it worked in a Playground. I will use the method you suggested and appease the challenge, but I still thought it could be used either through calling the function append or by concatenation of two arrays of type String.

AJ Salmon
AJ Salmon
5,675 Points

Huh! I just tried your version out in a playground, and it does seem to work! I'm not super knowledgeable when it comes to swift types, but it appears that it's getting the exact same result, and that's definitely a smart way to do it. Sometimes, code challenges can tell whether specific keywords are used, like append, for instance. That would be my guess as to why your code didn't pass the challenge; it wanted you to use the append method specifically. Another reason could be that the concatenation method unnecessarily creates a new array with a single element, whereas the .append() adds it to the array directly. Regardless, glad I could help :)