У вас есть класс class Animal
, и вы звоните addAnimalToZoo(animal:Animal)
, однако это НЕ ВИДЕТСЯ в Animal
. Обратите внимание, что скобки { }
для class Animal
ЗАКРЫТЫ перед тем, как инициализировать addAnimalToZoo(animal:Animal)
. Следовательно, class Animal
не может видеть эту ссылку. Вы можете, однако, сделать это
//Everything afterward would be part of the AppController
var zoo = [Int: Animal]()
var animalCounter = 0;
func addAnimaltoZoo(animal: Animal) {
zoo[animalCounter] = animal
animalCounter += 1
}
var Tom = Animal(name: "Tom", species: "Cat", age: 105)
var Jerry = Animal(name: "Jerry", species: "Mouse", age: 108)
addAnimalToZoo(animal: Tom)
addAnimalToZoo(animal:Jerry
for (animalID, animalDetails) in zoo {
print("\(animalID): \(animalDetails)")
}
Примечание: я хотел бы сохранить это так, поскольку Animal
и Zoo
НЕ одинаковы, поэтому addAnimalToZoo(animal:Animal)
НЕ должно быть в class Animal
.
Что касается animalDetails
, я не совсем уверен, что там происходит и что это печатает. Похоже, что он печатает zoo.enumerated()
, который вы можете видеть из перечисленных () для массива .
Что вам следует делать, если вы хотите напечатать переменные животных или то, что я делаю, может быть, есть лучший способ, это создать метод и вызвать его.
class Animal {
var name : String
var species : String
var age : Int
init(name:String, species:String, age:Int) {
self.name = name
self.species = species
self.age = age
}
func printAnimalDetails() {
print("Age: \(self.age) -- Species: \(self.species) -- Name: \(self.name)")
}
}
Тогда назовите это
for (index, animal) in zoo.enumerated() {
print("\(index)", terminator: "") //The terminator allows it to NOT create a new line on the next print statement.
animal.printAnimalDetails()
}