如何使用alamofire和SwiftyJSON构建对象



>我正在尝试创建一个返回包含许多数据的 Multiup 表的应用程序,但我认为我在这里需要一个完成处理程序。

// object data :
import Foundation
class  RepoSwiftyJSON:NSObject {
   let _userId:String!
   let _title:String!
   init(userid:String , title:String){
      self._userId = userid
      self._title = title  
   }
}

表视图控制器

import UIKit
import Alamofire
import SwiftyJSON
class TableViewController: UITableViewController {

   var parkData:[JSON] = []
   var aryId = [RepoSwiftyJSON]()
   func getJSONData() {
       let url = "http://jsonplaceholder.typicode.com/posts/"
       Alamofire.request(.GET,url).responseJSON {response in
           guard let data = response.result.value else {
               let error = response.result.error
               let alertController = UIAlertController(title: "Error", message:error?.localizedDescription, preferredStyle: .Alert)
               let okAction = UIAlertAction(title: "Retry", style: .Default, handler: { (alert:UIAlertAction) -> Void in
                      UIApplication.sharedApplication().networkActivityIndicatorVisible = true
                      self.getJSONData()
                      alertController.dismissViewControllerAnimated(true, completion: {})
               })
               alertController.addAction(okAction)
               self.presentViewController(alertController, animated: true, completion: {})
               UIApplication.sharedApplication().networkActivityIndicatorVisible = false
               return
           }
           let json = JSON(data)
           self.parkData = json.array!
           for key in self.parkData{
              let DataArray:RepoSwiftyJSON = RepoSwiftyJSON ()
              let userId = key["userId"].intValue
              let title = key["title"].string
              DataArray._userId = userId
              DataArray._title = title
              self.aryId.append(DataArray)
           }
           self.showJSONData()
      } 
   }
   func showJSONData() {
      //println(parkData)
      tableView.reloadData()
   }
   override func viewDidLoad() {
     super.viewDidLoad()
     getJSONData()
   }

   // MARK: - Table view data source
   override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
      return 1
   }
   override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
       if let numberOfRows: Int = self.aryId.count {
          return numberOfRows
       } else {
          return 0
       }    
    }
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
       let cell = tableView.dequeueReusableCellWithIdentifier("masterCell", forIndexPath: indexPath) 
       let rowData:JSON = aryId[indexPath.row]
       cell.textLabel?.text = rowData._title
       cell.detailTextLabel?.text = String(rowData._userId)
       print(rowData)
       return cell
    }

但是当我运行该应用程序时,出现以下错误:

Missing argument for parameter 'userid' 

在线路呼叫线路let DataArray:RepoSwiftyJSON = RepoSwiftyJSON ()

Cannot subscript a value of type '[RepoSwiftyJSON]' 

在生产线let rowData:JSON = aryId[indexPath.row]

我做错了什么?

让我们修复零件的问题:

第一个错误

根据苹果公司的说法:

和结构必须在创建该类或结构的实例时将其所有存储的属性设置为适当的初始值。存储的属性不能保持不确定状态。

可以在初始值设定项中为存储的属性设置初始值,也可以通过将默认属性值作为属性定义的一部分来分配。

您正在尝试在继承自NSObject的类RepoSwiftyJSON中使用默认的 init 方法,不建议使用 ! 运算符向编译器显式说明对象在运行时将具有值。因此,解决问题的一种选择是使用以下方式使用convenience初始值设定项:

class RepoSwiftyJSON: NSObject {
   let _userId: String
   let _title: String
   init(userid:String , title:String){
      self._userId = userid
      self._title = title
   }
   override convenience init() {
     self.init(userid: "a", title: "b")
   }
}
let DataArray: RepoSwiftyJSON = RepoSwiftyJSON()
DataArray._title // a
DataArray._userId // b

通过上述方式,您可以覆盖NSObject的默认init并将其标记为convenience以允许在默认init方法中调用另一个init(userid:String , title:String)

有很多

方法可以解决您的第一个错误,以上只是其中之一。

第二个错误:

如果我们检查变量aryId在他的定义中:

var aryId = [RepoSwiftyJSON]()

这是一个RepoSwiftyJSON数组,在以下行中:

let rowData: JSON = aryId[indexPath.row]

您正在尝试将上述行返回的类型为 RepoSwiftyJSON 的元素分配给另一个类型 JSON 的元素,但这不正确。

编辑:

您可以使用以下函数创建 JSON:

let jsonObject: [AnyObject] = [
   ["name": "John", "age": 21],
   ["name": "Bob", "age": 35],
]
func createJSON(value: AnyObject) -> String {
   let options = NSJSONWritingOptions.PrettyPrinted
   guard NSJSONSerialization.isValidJSONObject(value) else {
      return ""
   }
    
   do {
       let data = try NSJSONSerialization.dataWithJSONObject(value, options: options)
    
       if let string = NSString(data: data, encoding: NSUTF8StringEncoding) {
          return string as String
       }
   } catch let error {
       print("(error)")
   }
   return ""
}

let json = createJSON(jsonObject)

你会看到:

[
  {
    "age" : 21,
    "name" : "John"
  },
  {
    "age" : 35,
    "name" : "Bob"
  }
]

我希望这对你有所帮助。

相关内容

  • 没有找到相关文章

最新更新