嗨,StackOverflow人们,

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

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

2个主要问题:


关于错误(Animal Init的最后一行),我想我明白为什么我在这里收到错误,但是我对于如何解决它感到非常困惑?我需要做些可选的事情吗?还是我完全误解了MVC格式?我试图在init中移动该方法,但是在引用Zoo变量时遇到了问题...如果在类定义之前移动Zoo变量,则Animal会出错。
我是否需要为类打印创建toString类型的方法
Swift正常吗?我尝试进行搜索,但是不断
找到了用于结构而不是用于类的资源...所以我有点
这里也很困惑。


在此先感谢
代码如下:

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 Animal并正在调用addAnimalToZoo(animal:Animal),但是,它不在Animal范围内。请注意,在初始化{ }之前,关闭了class AnimaladdAnimalToZoo(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()
}

关于swift - Swift(操场):使用 Unresolved 标识符'addAnimaltoZoo',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54058206/

10-13 04:39