鑑於這種結構:直角三角形實施
struct RightTriangle {
var length: Double
var width: Double
var hypotenuse : Double {
get {
return sqrt((self.length * self.length) + (self.width * self.width))
}
}
}
我可以輕鬆地創建它的一個實例:
var rightTriangleOne = RightTriangle(length: 3.0, width: 4.0)
,並獲得斜邊值:
rightTriangleOne.hypotenuse //returns 5.0
現在,這裏的問題
如果我想設置如何將斜邊設置爲特定值,並讓寬度和長度值反映這些變化?
我們可以創建基於新的斜邊值,我們重新分配的寬度或長度(在這種情況下寬度)二傳手:
set {
self.width = sqrt((newValue * newValue) - (length * length))
}
現在,如果我們檢查了我們的價值觀:
rightTriangleOne.width // 4.0
rightTriangleOne.length // 3.0
rightTriangleOne.hypotenuse // 5.0
一切都很好,但現在讓我們嘗試將斜邊設置爲一個新值:
rightTriangleOne.hypotenuse = 10.0
很酷, š現在檢查我們的長度和寬度(寬度應修改本身,讓斜邊爲10,但長度不亂):
rightTriangleOne.width // 9.539392014169456
rightTriangleOne.length // 3.0
這是偉大的,所有的,但有一個問題。問題在於,如果我們將長度或寬度設置爲除當前值以外的其他任何值,那麼斜邊會發生改變,而我不希望這樣做。
例如
如果我設置斜邊10,並且寬度爲4,長度應該設置爲9.16左右。
此實現是否可行?我試圖嚴格執行計算屬性。
在此先感謝。在width
和length
我不知道swift,但總的來說,你需要一個斜邊長度不變的專用類型,或者一個專門的例程,它可以在保持ac的同時改變長度或寬度即時斜邊長度。 – phoog
是的,我在想同樣的事情。我有一位同事向我提出了這個建議,而且我只是通過計算屬性來解決這個問題。寄予厚望,我會繼續發佈問題。感謝您的幫助@phoog –
因此,如果您設置了任何兩個屬性,第三個屬性會自動計算? – vacawama