【问题标题】:How can I print the end result of this method in Swift?如何在 Swift 中打印此方法的最终结果?
【发布时间】:2017-07-18 19:53:50
【问题描述】:

抱歉,标题很粗略,但我正在 teamtreehouse.com 上学习 Swift 课程,并且我做了一个“代码挑战”来回顾面向对象的 Swift 课程。无论如何,为我提供了几个类,我的目标是继承 Machine 类并覆盖该方法以实际做某事,我做到了。我通过了挑战,但很好奇我是否可以在传入参数后实际打印此函数的最终结果。

class Point {
    var x: Int
    var y: Int

    init(x: Int, y: Int) {
        self.x = x
        self.y = y
    }
}

class Machine {
    var location: Point

    init() {
        self.location = Point(x: 0, y: 0)
    }

    func move(_ direction: String) {
        print("Do nothing! I'm a machine!")
    }
}

// Enter your code below

class Robot: Machine {
    override func move(_ direction: String) {
        switch direction {
        case "Up": location.y += 1
        case "Down": location.y -= 1
        case "Left": location.x -= 1
        case "Right": location.x += 1
        default: break
        }

    }
}

let aRobot = Robot()
aRobot.move("Up")
print(aRobot.location)

所以,最后 3 行是我实际管理的尝试,但在控制台中,打印的是“Point”行,而不是正在执行的方法的实际结果。如果可能的话,我希望以坐标的形式打印结果。抱歉可能有错误的代码,我只是一个初学者。提前致谢!

【问题讨论】:

  • 好吧,我确实设法找到了一种方法来打印结果,方法是删除整个 Point 类并将存储的属性位置类型更改为 (x: Int, y: Int),然后对init 方法,但我仍然很好奇在仍然使用 Point 类型的同时是否有可能

标签: objective-c swift xcode class methods


【解决方案1】:

为了能够在 swift 中打印一个类型,您需要该类型符合 CustomStringConvertible 协议。这个协议只有一个要求,实现一个description var

extension Point: CustomStringConvertible {
 var description: String {
   return "(\(x), \(y))"
 }
}

【讨论】:

  • 那么我是否应该在尝试打印之前执行此代码?
  • 源代码中的任何地方都可以。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多