2017-02-28 77 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