我创建了 5 个类,包括 ProfileHomeModel、ProfileLocationModel、ProfileRequestManager、ProfileTableUserViewController 和 ProfileTableViewCell。我的目标是正确解析 json 并显示数据。我在请求管理器类中遇到了问题。我对 swift 完全陌生。我想在不使用 swiftyJSON 和 Alamofire 的情况下做到这一点。
import Foundation
class ProfileRequestManager{
let urlPath = "*********"
let url = NSURL(string: urlPath)
let data = NSData(contentsOfURL: url!)
do {
let jsonData = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) as? NSDictionary
print(jsonData)
let results = jsonData!.objectForKey("strengths") as? [NSDictionary] ?? []
for result in results {
print(result)
}
}
catch {
print("Something went wrong while parsing json data fetched from the API")
}
}
json数据
{
"success": true,
"profile": {
"firstname": "Vignesh",
"lastname": "Krish",
"title": "Software Developer Intern",
"designations": null,
"specialty": "Computer Science",
"location": "0",
"email": "vignesh@ampthealth.com",
"phone": "4026136265",
"biography": "Boxing and Travelling",
"interests": "Watching movies",
"skills": "Hozier and A.R Rahman",
"goals": "becoming a software developer",
"mentors": "Hardik Patel",
"doh": "2016-05-09",
"dob": "1994-06-08",
"strengths": [
{
"id": "4",
"name": "Analytical",
"description": "People exceptionally talented in the Analytical theme search for reasons and causes. They have the ability to think about all the factors that might affect a situation.",
"color": "9c0000"
},
{
"id": "17",
"name": "Focus",
"description": "People exceptionally talented in the Focus theme can take a direction, follow through, and make the corrections necessary to stay on track. They prioritize, then act.",
"color": "5c3a6e"
},
{
"id": "8",
"name": "Communication",
"description": "People exceptionally talented in the Communication theme generally find it easy to put their thoughts into words. They are good conversationalists and presenters.",
"color": "da892f"
},
{
"id": "29",
"name": "Responsibility",
"description": "People exceptionally talented in the Responsibility theme take psychological ownership of what they say they will do. They are committed to stable values such as honesty and loyalty.",
"color": "5c3a6e"
},
{
"id": "30",
"name": "Restorative",
"description": "People exceptionally talented in the Restorative theme are adept at dealing with problems. They are good at figuring out what is wrong and resolving it.",
"color": "5c3a6e"
}
],
"settings": {
"enable_sms": "0"
}
}
}
我正在尝试归还上面的所有内容
我得到的错误是在做的事情上。Xcode
给了我一个预期的声明错误。我检查了我的花括号。
希望能得到一些帮助来解决这个问题。
此外,出于安全目的,我不需要包含 url。我希望它有所帮助。
我也试图在单独的单元格中显示所有值。这就是我现在所拥有的。
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if indexPath.row == 0 {
let cell = tableView.dequeueReusableCellWithIdentifier("ProfileCell", forIndexPath: indexPath) as! ProfileUserTableViewCell
cell.firstName?.text = firstName
cell.lastName?.text = lastName
cell.title?.text = title
return cell
}
}
你知道我该如何解决这个问题吗?
这是我目前的情况。我无法让它显示在表格视图单元格上。问题似乎在于我如何将我的 json 值分配给标签。
导入 UIKit
类 ProfileUserTableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
tableView.reloadData()
//retrieving json from server
let requestURL: NSURL = NSURL(string: "https:******************")!
//Your baseURL
let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(urlRequest) {
(data, response, error) -> Void in
let httpResponse = response as! NSHTTPURLResponse
let statusCode = httpResponse.statusCode
if (statusCode == 200) {
print("Everyone is fine")
do {
let JSON = try NSJSONSerialization.JSONObjectWithData(data!, options:NSJSONReadingOptions(rawValue: 0))
guard let JSONDictionary :NSDictionary = JSON as? NSDictionary else {
print("Not a Dictionary")
return
}
// print("JSONDictionary! \(JSONDictionary)")
if let profile = JSONDictionary["profile"] as? NSDictionary {
print(profile)
//This is where we should begin parsing json into whatever you want to
let firstName = profile["firstName"] as? String
let lastName = profile["lastName"] as? String
let title = profile["title"] as? String
print(firstName!, lastName, title!)
// let settings = profile["settings"] as? NSDictionary
//
// let enableSMS = settings!.valueForKey("enable_sms") as? String
// print(enableSMS!)
//to parse commentTotals content from api
let commentTotals = profile["commentTotals"] as? NSArray
for eachItem in commentTotals! {
let total = eachItem.valueForKey("total") as? String
let id = eachItem.valueForKey("id") as? String
print(total!,id!)
}
//to parse strength contents from api
let strengths = profile["strengths"] as? NSArray
for eachItem in strengths! {
let color = eachItem.valueForKey("color") as? String
let description = eachItem.valueForKey("description")
let id = eachItem.valueForKey("id")
let name = eachItem.valueForKey("name")
print(name!, description!, color!, id!)
}
}
}
catch let JSONError as NSError {
print("\(JSONError)")
}
}
}
task.resume()
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Table view data source
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return 4
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if indexPath.row == 0 {
let cell = tableView.dequeueReusableCellWithIdentifier("ProfileCell", forIndexPath: indexPath) as! ProfileUserTableViewCell
cell.firstName?.text = [indexPath.row].firstName
cell.lastName?.text = [indexPath.row].lastName
cell.title?.text = [indexPath.row].title
return cell
}
if indexPath.row == 1 {
let cell = tableView.dequeueReusableCellWithIdentifier("ProfileCell2", forIndexPath: indexPath) as! ProfileUserTableViewCell
cell.score?.text = [indexPath.row].score
cell.received?.text = [indexPath.row].received
cell.given?.text = [indexPath.row].given
return cell
}
if indexPath.row == 2 {
let cell = tableView.dequeueReusableCellWithIdentifier("ProfileCell3", forIndexPath: indexPath) as! ProfileUserTableViewCell
cell.coreValueComments1?.text = [indexPath.row].total
cell.coreValueComments2?.text = [indexPath.row].total
cell.coreValueComments3?.text = [indexPath.row].total
cell.coreValueComments4?.text = [indexPath.row].total
return cell
}
else {
let cell = tableView.dequeueReusableCellWithIdentifier("ProfileCell4", forIndexPath: indexPath) as! ProfileUserTableViewCell
cell.strength1?.text = [indexPath.row].name
cell.strength2?.text = [indexPath.row].name
cell.strength3?.text = [indexPath.row].name
cell.strength4?.text = [indexPath.row].name
return cell
}
}
}