Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trialJuliano Jakymiu
2,040 PointsCode could not be compiled, but preview is empty
struct Tag { let name: String }
struct Post {
let title: String
let author: String
let tag = Tag(name:"swift")
func description() -> String {
return "\(title) by \(author). Filed under \(tag)"
}
}
let firstPost = Post(title:"IOSDevelopment", author:"Apple") let postDescription = firstPost.description()
Why is this not working? Or even better, if tag of type Tag, which in itself is a String, how do I feel the parameters? If I do not assign a value to tag under the struct Post, and later on try to create firstPost = Post (title: "xxx", author: "xxl", tag "123), I get an error saying that tag is not a String type, but a Tag type. Tag type in itself is a String type. I am super confused...
struct Tag {
let name: String
}
struct Post {
let title: String
let author: String
let tag = Tag(name:"swift")
func description() -> String {
return "\(title) by \(author). Filed under \(tag)"
}
}
let firstPost = Post(title:"IOSDevelopment", author:"Apple")
let postDescription = firstPost.description()
3 Answers
Amazon Web
iOS Development Techdegree Student 4,092 PointsYou should not instantiate the Tag property inside the Post struct.
struct Tag {
let name: String
}
struct Post {
let title: String
let author: String
let tag: Tag
}
let firstPost = Post(title: "Swift", author: "Apple", tag: Tag(name: "Programming"))
Juliano Jakymiu
2,040 PointsHi guys, still nothing. If I do as Amazon Web said, now the "Tag(name: "XZY")" is part of the interpolation and I still get and error saying to match the description using interpolation
struct Tag { let name: String }
struct Post { let title: String let author: String let tag: Tag
func description() -> String { return "(title) by (author). Filed under (tag)" }
}
let firstPost = Post(title: "iOS Development", author: "Apple", tag: Tag(name: "swift")) let postDescription = firstPost.description()
Amazon Web
iOS Development Techdegree Student 4,092 PointsSo here is the exact answer. You are should not just call the property tag but you should call the property of the tag property which is the name
struct Tag {
let name: String
}
struct Post {
let title: String
let author: String
let tag: Tag
func description() -> String {
return "\(title) by \(author). Filed under \(tag.name)"
}
}
let firstPost = Post(title: "Swift", author: "Apple", tag: Tag(name: "Programming"))
let postDescription = firstPost.description()
Jonathan Fernandez
4,047 PointsJonathan Fernandez
4,047 PointsThe property "tag" you declared in your stuct "Post", is an "instance of Tag". Thereby, it is of type Tag not of string. Think of enums, structs, and class as a type in its own-self. However, rather than being a type like Int or String, it is the type given to any instance of it, hence those three are known as object "types."
If you want to access your name in your tag "instance" you created. then in your string interpolation replace "title" with tag.name. By doing so you are accessing the name property declared in your tag instance you created.