2016-08-07 12 views
0

Ich versuche, meine Zutaten Name (FoodName), die in der Klasse SpecificFood ist. Die Mahlzeitklasse hat eine Eigenschaft Mahlzeit Zutaten, die Zutaten Objekte enthält.Wie greife ich auf eine Variable von einer Klasse zu, die sie von einer anderen nimmt?

In der Tabellenansicht versuche ich nun, auf das foodName in den mealingredients zu verweisen, jedoch findet es das foodName nicht, weil das sich auf das SpecificFood eher als die Mahlzeitklasse bezieht. Ich gebe die Namen für alles und die Zutaten in einer separaten Modellklasse in verschiedene Lebensmittel ein.

Wenn es eine bessere Möglichkeit gibt dies zu tun, lassen Sie es mich bitte wissen, ich bin neu zu schnell und Programmierung.

Jede Hilfe würde sehr geschätzt werden.

Ich habe Bezug auf alle verschiedenen Klassen in der Spitze solcher;

var myMeals:Array = [Meal]() 
    var meals:[Meal] = [Meal]() 
    var ingredients:[SpecificFood] = [SpecificFood]() 

Meine Mahlzeit Klasse ist so;

class Meal: NSObject { 



    var mealTitle:String = "" 
    var mealID:String = "" 
    // var mealIngredients:NSArray = [NSObject]() 
    var mealIngredients:NSArray = [SpecificFood]() 

} 

Meine SpecificFood-Klasse ist so;

class SpecificFood: NSObject { 

    var foodName = "" 
    var foodGroup = "" 

} 

Dann ist mein Modell so; (Ich habe einige der anderen Lebensmittel und Zutaten genommen, aber dies gibt den jist.

class MealModel: NSObject { 

    var ingredients:[SpecificFood] = [SpecificFood]() 



    func getMeals() -> [Meal] { 

var allFoods = [SpecificFood]() 
let meat = String() 

let chicken = SpecificFood() 
let rice = SpecificFood() 

// Assign properties of the SpecificFoods 
chicken.foodName = "Chicken" 
chicken.foodGroup = meat 

// Add foods to my food array 
allFoods.append(chicken) 

// Create a meal objects 
var meal1 = Meal() 


// Assign properties 
meal1.mealIngredients = [chicken, rice, tomatoeSauce] 

Die oberen beiden Teile des Codes auf die Klasse verweisen mit dem Tableview in. Sie hat keinen anderen Code in abgesehen von var selectedMeal:Meal?

+0

Können Sie Ihre Klassenvariablen anzeigen – Shades

+0

@Shades hilft das? Ich habe versucht, alle Informationen zu zeigen, die ich kann. Ich denke, es ist die objektorientierte Programmierung und Vererbung, wo ich verwirrt werde. –

+0

In Ihrem Code ist FoodName in dieser Zeile großgeschrieben: lent ingredientTitle = meal? .mealIngredients [indexPath.row] .FoodName – Shades

Antwort

0

Ohne Ihre Klassenvariablen zu sehen, es ist ein bisschen schwer ... ich werde dieses allgemeine Beispiel schreiben:

class firstViewController: UIViewController { 
    var someVariable: SomeType = someValue 
    var someVariable2: SomeType = someValue 

    init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { 
     super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) 
    } 
} 

dann die Ansicht instanziiert:

var myCustomViewController: firstViewController = firstViewController(nibName: nil, bundle: nil) 
var variable = myCustomViewController.someVariable 
var variable2 = myCustomViewController.someVariable2 
+0

Hilft Ihnen das weiter? Entschuldigung für die unklare erste Frage. –

+0

Versuchen Sie, Ihre Klasse zu instanziieren und die Variablen wie in diesem Beispiel gezeigt zu erhalten. Denken Sie daran, dass die Variablen aus der Klasse 'source' öffentlich und global sein müssen, oder erstellen Sie Methoden, um auf sie zuzugreifen, wenn sie privat sind – Nick

0

Wenn Sie

meal1.mealIngredients = [chicken, rice, tomatoeSauce] 

haben, dann greifen Sie Huhn Namen und Lebensmittelgruppe mit:

meal1.mealIngredients[0].foodName // Chicken 
meal1.mealIngredients[0].foodGroup // meat 

Sie möchten mit structs anstelle von Klassen betrachten (es sei denn Sie bereits sind Vererbung verwenden).

struct SpecificFood { 
    var foodName = "" 
    var foodGroup = "" 
} 

struct Meal { 
    var mealTitle:String = "" 
    var mealID:String = "" 
    var mealIngredients: [SpecificFood] 
} 

Ihr Code wird:

let chicken = SpecificFood(foodName: "Chicken", foodGroup: "meat") 
var meal1 = Meal(mealTitle: "Chicken and Rice", mealID: "45634", mealIngredients: []) 

und Sie Zugriff auf die Eigenschaften mit der Punktsyntax (.).