如何使label.text等于数组中自定义对象的值?

时间:2017-01-07 18:59:22

标签: ios json swift

目前我有一些自定义JSON对象:

class JSONObjects {

  var airbnbUS: String
  var airbnbLocal: String
  var image: URL


  init(airbnbUS: String, airbnbLocal: String, image: URL){

    self.airbnbUS = airbnbUS
    self.airbnbLocal = airbnbLocal
    self.image = image
  }

在解析json之后,我将自定义对象的数组通过segue传输到详细视图控制器上:

 var jsonObjectsArray: [JSONObjects] = []

  override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "practiceTableToDetailSegue" {

      if let detailVC = segue.destination as? PracticeDetailViewController {
        self.jsonObjectsArray = detailVC.jsonObjectArray
      }
    }
  }

在详细视图控制器上,我想获取自定义对象数组的元素并通过标签显示它们但是当我尝试访问数组时,我得到的唯一选项是

  

.count,.capacity等

我正在尝试在标签和imageView中显示自定义对象值,但它没有让我选择访问自定义对象值:

 class PracticeDetailViewController: UIViewController {

  var jsonObjectArray: [JSONObjects] = []


  @IBOutlet weak var topLabel: UILabel!
  @IBOutlet weak var bottomLabel: UILabel!
  @IBOutlet weak var image: UIImageView!

  override func viewDidLoad() {
    super.viewDidLoad()


    self.topLabel.text = jsonObjectArray.airbnbUS  //DOES NOT WORK!
    self.bottomLabel.text = jsonObjectArray.airbnbLocal //DOES NOT WORK!
    self.image.image = UIImage(data: jsonObjectArray.image) //DOES NOT WORK!
  }
}

2 个答案:

答案 0 :(得分:2)

您正在尝试访问阵列上self.topLabel.text = jsonObjectArray[0].airbnbUS //DOES WORK! self.bottomLabel.text = jsonObjectArray[0].airbnbLocal //DOES WORK! self.image.image = UIImage(data: jsonObjectArray[0].image) //DOES WORK! 的属性,而不是数组的元素。

试试这个:

JSONObject

另外,一种风格评论:我建议你的课程是单数的(即JSONObjects而不是JSONObjects)。当您实例化一个对象时,您只创建一个对象,而不是一堆{{1}}

答案 1 :(得分:0)

尝试这样的事情:

class PracticeDetailViewController: UIViewController {

    var jsonObjectArray: [JSONObjects] = []


    @IBOutlet weak var topLabel: UILabel!
    @IBOutlet weak var bottomLabel: UILabel!
    @IBOutlet weak var image: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.jsonObjectArray.append(JSONObjects(airbnbUS: "airbnbUS", airbnbLocal: "airbnbLocal", image: URL(string: "url")!))


        self.topLabel.text = jsonObjectArray[0].airbnbUS
        self.bottomLabel.text = jsonObjectArray[0].airbnbLocal

        do {
            let data = try Data(contentsOf: jsonObjectArray[0].image)
            self.image.image = UIImage(data: data)
        } catch {}

    }
}