2017-02-28 78 views
0

对不起,我承认粗略的标题,但我正在参加teamtreehouse.com上的Swift课程,并且我做了一个“代码挑战”,重新描述了面向对象的Swift课程。无论如何,我被提供了几个类,我的目标是继承Machine类并重写实际执行某些操作的方法,这是我做的。我通过了这个挑战,但很好奇,如果在传入一个参数之后我可以实际打印这个函数的最终结果。如何在Swift中打印此方法的最终结果?

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行是我尝试进行实际管理这一点,但在控制台中,行“点”打印,而不是方法的实际效果正在制定。如果可能,我希望以坐标的形式打印结果。对不起,可能是错误的代码,我只是一个初学者。提前致谢!

+0

嗯,我还是设法想出一个办法去除Point类作为一个整体,改变存储的属性位置类型得到它的打印结果到'(x:Int,y:Int)',然后对init方法做同样的事情,但我仍然很好奇,是否仍然可以使用Point类型 –

回答

0

为了能够快速打印类型,您需要此类型符合CustomStringConvertible协议。该协议只有一个要求,实现description VAR

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

所以我只是在我试图打印之前实现这个代码它? –

+0

源中的任何地方都可以。 – tomahh