2015-01-27 17 views
25

Đây là lớp tùy chỉnh của tôi ... không chắc chắn nếu tôi là thiếu bất cứ điều gì ở trong đó ...Làm thế nào để khai báo đúng đối tượng của các đối tượng tùy chỉnh trong 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 
    } 
} 

Tôi đang cố gắng để nhanh chóng ở đây ...

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 

tôi didn' t bao gồm phần còn lại của lớp ViewController, bởi vì tôi không nghĩ rằng nó là cần thiết.

Lỗi xảy ra khi tôi cố gán giá trị cho nền tảng [0] .Brand

Đánh giá cao sự trợ giúp của bạn trước!

+0

Cảm ơn tất cả vì sự giúp đỡ của bạn. Để làm rõ, tôi đã không cố gắng sử dụng mảng 2D, vì vậy tôi đã cố định điều đó. Tuy nhiên ngay cả sau khi tôi đã tạo ra một đối tượng mới của kiểu BaseMakeUp, khi tôi cố gắng thêm nó, tôi vẫn nhận được lỗi "tuyên bố dự kiến". Tôi tin rằng lỗi thực sự là với tuyên bố của tôi về mảng vì khi tôi cố gắng để loại nền tảng một lần nữa, Xcode không tự động hoàn thành hoặc thay đổi màu chữ như bình thường. Không chắc chắn những gì còn thiếu. – jbd36

Trả lời

0

Bạn cần phải nhanh chóng đối tượng lớp học của bạn

dụ:

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

Bạn có một vài điều xảy ra ở đây:

  1. Bạn đang thiếu một số quy ước đặt tên. Tên lớp phải được viết hoa (baseMakeUp phải là BaseMakeUp).
  2. Loại thùng nên viết hoa chữ thường (image, brand, color, rating). Ngoài ra brand & color trong phương pháp init.
  3. Bạn dự định cho mảng foundation của bạn sẽ được đa chiều? Nếu bạn chỉ muốn một mảng bình thường, tôi muốn đi với một cái gì đó như:

    var foundation = [BaseMakeup]? 
    
  4. Như câu trả lời khác nói, bạn cũng cần phải nhanh chóng đối tượng BaseMakeup sử dụng phương pháp init của bạn:

    let aBaseMakeup = BaseMakeup(brand: "Revlon", color: "Red") 
    
  5. sau đó, bạn có thể thêm các đối tượng BaseMakeup để mảng của bạn như thế này:

    foundation?.append(aBaseMakeup) 
    

hopeful ly Tôi hiểu những gì bạn đang cố gắng hoàn thành.

37

Đầu tiên, tôi sẽ giả sử bạn không muốn mảng 2ngày. Nếu bạn đã làm, tôi sẽ trả lời câu hỏi của bạn từ quan điểm đó bên dưới.

var foundation = [baseMakeUp]() 

Tạo một mảng rỗng của baseMakeUp được gọi là nền tảng. Bạn không thể sử dụng subscripting để thêm các phần tử vào một mảng, bạn chỉ có thể sử dụng nó để thay đổi các phần tử hiện có. Vì mảng của bạn trống nên bạn thêm các phần tử có gắn thêm.

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

Vì bạn không có một initializer baseMakeUp cho phép bạn vượt qua một đánh giá rằng giá nguyên tố là 0.Tuy nhiên kể từ khi bạn gắn nó vào mảng của bạn bây giờ bạn có thể sử dụng subscripting để thay đổi nó Rating biến như thế này:

foundation[0].Rating = 3 

Nếu bạn đã có ý định cho mảng 2ngày.

var foundation = [[baseMakeUp]]() 

Để tạo mảng

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

Dòng đầu tiên gắn thêm một mảng trống để mảng cấp cao nhất của bạn. Dòng thứ hai nối thêm một baseMakeUp vào mảng được thêm vào trong dòng đầu tiên. Dòng thứ ba sử dụng subscripting để thay đổi Rating của phần tử đầu tiên trong mảng đầu tiên của mảng 2d của bạn.

Hy vọng rằng sẽ giúp giải quyết vấn đề của bạn.

Ngoài

tôi sẽ thêm điểm 1 và 2 từ jday001s trả lời ở đây, nhưng bạn nên kiểm tra câu trả lời của họ là tốt.

Sửa

Tôi chỉ nhận ra rằng bạn đang cố gắng để thêm các yếu tố để các mảng của bạn trong phạm vi sai.

Bạn sẽ phải di chuyển của bạn

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

bên trong một hàm và gọi nó cho mình hoặc đặt chúng bên trong một cái gì đó giống như viewDidLoad

ví dụ:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

    var foundation = [baseMakeUp]() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

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

Hy vọng rằng đó là hữu ích.

+0

Tôi đã cập nhật câu trả lời của mình. Tôi hy vọng tôi đủ rõ ràng. – Nightly

+0

Vâng đó là toàn bộ thời gian, tôi đã phạm sai phạm khi thử nhiều thứ! Cảm ơn một lần nữa vì sự giúp đỡ của bạn, tôi hy vọng sẽ vượt qua nó! – jbd36

+0

Nhưng khi tôi cần truy cập vào mảng nền tảng ngay bây giờ, nó sẽ cho kết quả như - BaseMakeup (Nhãn hiệu: "Cái gì đó", màu sắc: "Cái gì đó"). Làm thế nào để có được nó như một kết quả đơn giản như {Brand: "SOmething", màu sắc: "Something"}? –

Các vấn đề liên quan