簡體   English   中英

如何在Swift中正確聲明自定義對象的數組?

[英]How to Properly Declare Array of Custom Objects in Swift?

這是我的自定義類...不確定我是否缺少任何內容...

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]分配值時發生錯誤。

提前感謝您的幫助!

首先,我假設您不想要2D數組。 如果您這樣做了,我將從下面的角度回答您的問題。

    var foundation = [baseMakeUp]()

創建一個空的baseMakeUp數組,稱為Foundation。 您不能使用下標將元素添加到數組,只能使用它來更改現有元素。 由於數組為空,因此需要添加帶有append的元素。

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

由於您沒有baseMakeUp初始化程序,該初始化程序可讓您傳遞該元素的等級為0的等級。但是,由於將其附加到數組后,現在可以使用下標來更改它的Rating變量,如下所示:

foundation[0].Rating = 3

如果您確實打算使用2D陣列。

    var foundation = [[baseMakeUp]]()

創建數組

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

第一行將一個空數組追加到頂級數組。 第二行將baseMakeUp追加到第一行中添加的數組。 第三行使用下標更改2d數組的第一個數組中第一個元素的評級。

希望這可以幫助您解決問題。

另外

我打算在這里從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
    }
}

希望這會有所幫助。

您在這里發生了一些事情:

  1. 您缺少一些命名約定。 類名應大寫( baseMakeUp應為BaseMakeUp )。
  2. 類別var必須使用小寫字母( imagebrandcolorrating )。 以及init方法中的brandcolor
  3. 您打算使foundation陣列具有多維性嗎? 如果您只想使用常規數組,則可以使用以下方法:

     var foundation = [BaseMakeup]? 
  4. 正如另一個答案所說,您還需要使用init方法實例化BaseMakeup對象:

     let aBaseMakeup = BaseMakeup(brand: "Revlon", color: "Red") 
  5. 之后,您可以像下面這樣將BaseMakeup對象添加到您的數組中:

     foundation?.append(aBaseMakeup) 

希望我了解您正在努力實現的目標。

首先創建一個自定義類...

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)")

您需要實例化您的類對象

例:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM