【问题标题】:How to Properly Declare Array of Custom Objects in Swift?如何在 Swift 中正确声明自定义对象数组?
【发布时间】:2015-03-25 15:04:41
【问题描述】:

这是我的自定义类...不确定我是否遗漏了任何内容...

import UIKit

class baseMakeUp {
    var Image = UIImage()
    var Brand: String
    var Color: String
    var Rating: Int = 0

    init (Brand: String, Color: String) {
        self.Brand = Brand
        self.Color = Color
    }
}

我正在尝试在这里实例化...

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    let cellIdentifier = "cellIdentifier"

    var foundation: [[baseMakeUp]]
    var blush: [[baseMakeUp]]
    var eyes: [[baseMakeUp]]
    var lips: [[baseMakeUp]]
    var nails: [[baseMakeUp]]

    // put some test data in makeup arrays here...
    foundation[0].Brand = "Revlon"     -------------> "Expected declaration" error.
    foundation[0].Color = "Red"
    foundation[0].Rating = 3
    foundation[1].Brand = "MAC"
    foundation[1].Color = "Blue"
    foundation[1].Rating = 4

我没有包含 ViewController 类的其余部分,因为我认为没有必要。

当我尝试为foundation[0].Brand赋值时出现错误

提前感谢您的帮助!

【问题讨论】:

  • 感谢大家的帮助。澄清一下,我并没有尝试使用 2D 数组,所以我已经解决了这个问题。然而,即使我创建了一个 BaseMakeUp 类型的新对象,当我尝试附加它时,我仍然会收到“预期声明”错误。我相信错误确实与我的数组声明有关,因为当我再次尝试键入基础时,Xcode 不会像往常一样自动完成或更改单词颜色。不确定缺少什么。

标签: ios arrays class swift instantiation


【解决方案1】:

你需要实例化你的类对象

示例:

var foundation = baseMakeUp(Brand: "Some Brand", Color: "Red")

【讨论】:

    【解决方案2】:

    这里发生了一些事情:

    1. 您缺少一些命名约定。类名应大写(baseMakeUp 应为 BaseMakeUp)。
    2. 类变量应为小写(imagebrandcolorrating)。还有brand & color init 方法。
    3. 你想让你的foundation 数组是多维的吗?如果你只想要一个常规数组,我会选择类似的东西:

      var foundation = [BaseMakeup]?
      
    4. 正如另一个答案所说,您还需要使用您的 init 方法实例化 BaseMakeup 对象:

      let aBaseMakeup = BaseMakeup(brand: "Revlon", color: "Red")
      
    5. 之后,您可以像这样将 BaseMakeup 对象添加到您的数组中:

      foundation?.append(aBaseMakeup)
      

    希望我能理解您要完成的工作。

    【讨论】:

      【解决方案3】:

      首先,我假设您不想要二维数组。如果你这样做了,我将从下面的角度回答你的问题。

          var foundation = [baseMakeUp]()
      

      创建一个名为foundation 的空数组baseMakeUp。您不能使用下标向数组添加元素,只能使用它来更改现有元素。由于您的数组是空的,因此您可以使用 append 添加元素。

         foundation.append(baseMakeUp(Brand: "Brand", Color: "Color"))
      

      由于您没有一个 baseMakeUp 初始化程序,它允许您传递一个元素的评级为 0 的评级。但是,由于您将它附加到您的数组中,您现在可以使用下标来更改它的评级变量,如下所示:

      foundation[0].Rating = 3
      

      如果您确实打算使用二维数组。

          var foundation = [[baseMakeUp]]()
      

      创建数组

          foundation.append([])
          foundation[0].append(baseMakeUp(Brand: "Brand", Color: "Color"))
          foundation[0][0].Rating = 3
      

      第一行将一个空数组附加到您的顶级数组。第二行将 baseMakeUp 附加到第一行中添加的数组。第三行使用下标来更改 2d 数组的第一个数组中第一个元素的 Rating。

      希望对您的问题有所帮助。

      另外

      我打算在这里添加 jday001s 答案中的第 1 点和第 2 点,但您也应该查看他们的答案。

      编辑

      我刚刚意识到您试图在错误的范围内向数组添加元素。

      你必须移动你的

      foundation.append(baseMakeUp(Brand: "Brand", Color: "Color")
      

      在函数内部并自己调用它或将它们放在 viewDidLoad 之类的东西中

      例如:

      class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
      
          var foundation = [baseMakeUp]()
      
          override func viewDidLoad() {
              super.viewDidLoad()
      
              foundation.append(baseMakeUp(Brand: "Brand", Color: "Color")
              foundation[0].Rating = 3
          }
      }
      

      希望这会有所帮助。

      【讨论】:

      • 我已经更新了我的答案。我希望我说得够清楚。
      • 是的,一直都是这样,我在错误的范围内尝试了很多事情!再次感谢您的帮助,希望转发!
      • 但是当我现在需要访问基础数组时,结果会像 - BaseMakeup(Brand: "Something", color:"Something")。我如何将它作为一个简单的结果,例如 {Brand: "SOthing", color: "Something"}?
      【解决方案4】:

      首先创建一个自定义类...

      import Foundation
      
      class ClassName{
      
        var id: Int?
        var name: String?
        var category_name: String?
        var price: Double?
      
         init(json: JSON) {
              self.id = json["id"].int
              self.name = json["name"].string
              self.category_name = json["category_name"].string
              self.price = json["price"].double
      }
      
      }
      

      使用可以通过以下几行在viewcontroller中使用这个类

      var arrayName:Array<yourclassname> = Array()
      print("/(yourclaseename[0].name)")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-19
        • 1970-01-01
        • 1970-01-01
        • 2017-08-11
        • 2019-11-29
        • 1970-01-01
        • 2017-12-16
        • 2019-07-28
        相关资源
        最近更新 更多