ここに私のカスタムクラスがあります...その中に何かが欠けているかどうかはわかりません...
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配列が必要ないことを想定します。もしそうなら、その観点からあなたの質問に答えます。
var foundation = [baseMakeUp]()
Foundationと呼ばれるbaseMakeUpの空の配列を作成します。添字を使用して配列に要素を追加することはできません。既存の要素を変更するためにのみ使用できます。配列が空なので、要素を追加して追加します。
foundation.append(baseMakeUp(Brand: "Brand", Color: "Color"))
評価を渡すことができるbaseMakeUp初期化子がないため、要素の評価は0です。ただし、配列に追加したので、次のように評価変数を変更するために添え字を使用できます。
foundation[0].Rating = 3
2D配列を意図していた場合
var foundation = [[baseMakeUp]]()
配列を作成するには
foundation.append([])
foundation[0].append(baseMakeUp(Brand: "Brand", Color: "Color"))
foundation[0][0].Rating = 3
最初の行は、空の配列を最上位の配列に追加します。 2行目は、1行目に追加された配列にbaseMakeUpを追加します。 3行目は、添え字を使用して、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
}
}
うまくいけば、それが役立っています。
ここでいくつかのことがあります:
baseMakeUp
はBaseMakeUp
でなければなりません)。image
、brand
、color
、rating
)。また、initメソッドのbrand
&color
。foundation
配列を多次元にするつもりですか?通常の配列だけが必要な場合は、次のようなものを使用します。
var foundation = [BaseMakeup]?
他の答えにあるように、initメソッドを使用してBaseMakeupオブジェクトをインスタンス化する必要もあります。
let aBaseMakeup = BaseMakeup(brand: "Revlon", color: "Red")
その後、次のように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")