【问题标题】:Swift (Playground): Use of unresolved identifier 'addAnimaltoZoo'Swift(游乐场):使用未解析的标识符“addAnimaltoZoo”
【发布时间】:2019-01-06 02:42:50
【问题描述】:

大家好 StackOverflow,

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

我试图应用 Animal Class 的经典示例来理解游乐场环境、语法和 [逻辑?]。

2 个主要问题:

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

  2. 我是否必须为要打印的类创建一个 toString 类型的方法 斯威夫特有什么正常的吗?我试图进行搜索,但不断 找到了结构而不是类的资源......所以我有点 这里也很困惑。

提前致谢

代码如下:

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

【问题讨论】:

    标签: swift swift-playground


    【解决方案1】:

    您有课程 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()
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-29
      • 1970-01-01
      • 2015-05-13
      • 2016-11-28
      • 2015-05-25
      • 2017-01-28
      • 2015-11-27
      • 1970-01-01
      相关资源
      最近更新 更多