Swift(游乐场):使用未解析的标识符 'addAnimaltoZoo'

Swift (Playground): Use of unresolved identifier 'addAnimaltoZoo'

嗨 Whosebug 的人,

我最近开始学习 iOS 开发。我已经对 Java 和 Python 有了一点经验,但是 Swift 对我来说是一种全新的语言。

我试图应用 Animal classic 示例 Class 来理解 playground 环境、语法和[逻辑?]。

2个主要问题:

  1. 关于错误(Animal Init 的最后一行)我想我明白为什么我会在这里收到错误,但我很困惑如何解决它?我必须做一些可选的吗?还是我完全误解了 MVC 格式?我试图在 init 中移动该方法,但在引用 Zoo var 时遇到问题...如果我在 class 定义之前移动 zoo var,则会出现 Animal.[=14= 错误]

  2. 我是否必须为 classes 创建一个 toString 类型的方法来打印 Swift 中的正常情况?我试图进行搜索,但不断 找到了结构的资源而不是 classes...所以我有点 这里也一头雾水

提前致谢<3

代码如下:

import UIKit

print("Welcome to the Animal Playground.")

//Simple Animal Class
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
        addAnimaltoZoo(animal: self) **//Use of unresolved identifier 'addAnimaltoZoo'**
    }
}

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

for (animalID, animalDetails) in zoo {
    print("\(animalID): \(animalDetails)")
}

打印:

Welcome to the Animal Playground.
0: __lldb_expr_4.Animal
1: __lldb_expr_4.Animal

您有 class 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)")
}

注意:我会保持这样,因为 AnimalZoo 不一样,因此,addAnimalToZoo(animal:Animal) 不应该在 class Animal.

关于 animalDetails,我不太确定那里发生了什么或正在打印什么。看起来它正在打印 zoo.enumerated(),您可以从 enumerated() for Array.

中看到

如果你想打印动物变量,你应该做的,或者我做的,也许有更好的方法,就是创建一个方法并调用它。

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()
}