From df856191d39ee27d341fca5afea276780dadc1ca Mon Sep 17 00:00:00 2001 From: nixzhu Date: Thu, 22 Oct 2015 17:41:15 +0800 Subject: [PATCH] fill skill to feed if can --- Yep/Services/YepService.swift | 54 ++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/Yep/Services/YepService.swift b/Yep/Services/YepService.swift index d21dead9..d03e27f5 100644 --- a/Yep/Services/YepService.swift +++ b/Yep/Services/YepService.swift @@ -178,6 +178,31 @@ struct Skill: Hashable { var hashValue: Int { return id.hashValue } + + static func fromJSONDictionary(skillInfo: JSONDictionary) -> Skill? { + if + let skillID = skillInfo["id"] as? String, + let skillName = skillInfo["name"] as? String, + let skillLocalName = skillInfo["name_string"] as? String { + + var skillCategory: SkillCategory? + if + let skillCategoryData = skillInfo["category"] as? JSONDictionary, + let categoryID = skillCategoryData["id"] as? String, + let categoryName = skillCategoryData["name"] as? String, + let categoryLocalName = skillCategoryData["name_string"] as? String { + skillCategory = SkillCategory(id: categoryID, name: categoryName, localName: categoryLocalName, skills: []) + } + + let coverURLString = skillInfo["cover_url"] as? String + + let skill = Skill(category: skillCategory, id: skillID, name: skillName, localName: skillLocalName, coverURLString: coverURLString) + + return skill + } + + return nil + } } func ==(lhs: Skill, rhs: Skill) -> Bool { @@ -222,25 +247,9 @@ func skillsFromSkillsData(skillsData: [JSONDictionary]) -> [Skill] { var skills = [Skill]() for skillInfo in skillsData { - if - let skillID = skillInfo["id"] as? String, - let skillName = skillInfo["name"] as? String, - let skillLocalName = skillInfo["name_string"] as? String { - var skillCategory: SkillCategory? - if - let skillCategoryData = skillInfo["category"] as? JSONDictionary, - let categoryID = skillCategoryData["id"] as? String, - let categoryName = skillCategoryData["name"] as? String, - let categoryLocalName = skillCategoryData["name_string"] as? String { - skillCategory = SkillCategory(id: categoryID, name: categoryName, localName: categoryLocalName, skills: []) - } - - let coverURLString = skillInfo["cover_url"] as? String - - let skill = Skill(category: skillCategory, id: skillID, name: skillName, localName: skillLocalName, coverURLString: coverURLString) - - skills.append(skill) + if let skill = Skill.fromJSONDictionary(skillInfo) { + skills.append(skill) } } @@ -2300,13 +2309,18 @@ struct DiscoveredFeed: Hashable { let attachments = attachmentsData.map({ DiscoveredAttachment.fromJSONDictionary($0) }).flatMap({ $0 }) - return DiscoveredFeed(id: id, allowComment: allowComment, createdUnixTime: createdUnixTime, updatedUnixTime: updatedUnixTime, creator: creator, body: body, attachments: attachments, distance: distance, skill: nil, groupID: groupID, messageCount: messageCount) + var skill: Skill? + if let skillInfo = json["skill"] as? JSONDictionary { + skill = Skill.fromJSONDictionary(skillInfo) + } + + return DiscoveredFeed(id: id, allowComment: allowComment, createdUnixTime: createdUnixTime, updatedUnixTime: updatedUnixTime, creator: creator, body: body, attachments: attachments, distance: distance, skill: skill, groupID: groupID, messageCount: messageCount) } } let parseFeeds: JSONDictionary -> [DiscoveredFeed]? = { data in - //println("feedsData: \(data)") + println("feedsData: \(data)") if let feedsData = data["topics"] as? [JSONDictionary] { return feedsData.map({ DiscoveredFeed.fromJSONDictionary($0) }).flatMap({ $0 })