Swift(操场):使用未解决的标识符'addAnimaltoZoo'

时间:2019-01-06 02:42:50

标签: swift swift-playground

您好,StackOverflow人员,

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

我试图将动物类的经典示例应用于理解游乐场环境,语法和[逻辑?]。

2个主要问题:

  1. 关于错误(Animal Init的最后一行),我想我明白为什么我在这里收到错误,但是我对如何解决它感到非常困惑?我需要做些可选的事情吗?还是我完全误解了MVC格式?我试图在init内移动该方法,但是在引用Zoo变量时遇到了问题...如果在类定义之前移动Zoo变量,则会出现Animal错误。

  2. 是否必须为要打印的类创建toString类型的方法 Swift中正常的东西?我试图进行搜索,但是不断 找到了用于结构而不是用于类的资源...所以我有点 这里也很困惑。

预先感谢<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

1 个答案:

答案 0 :(得分:0)

您拥有类class Animal,并且正在调用addAnimalToZoo(animal:Animal),但是,它不在Animal范围内。请注意,{ }的{​​{1}}括号在初始化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,您可以从enumerated() for Array看到它。

如果要打印动物变量,或者我要做什么,也许有更好的方法是创建一个方法并调用它。

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