我定義了一個簡單的通用結構 - 它的唯一要求是,它的存儲性能是Comparable
:提供專門的初始化一個通用的結構
struct Bounds<A: Comparable> {
let lower: A
let upper: A
}
不過,我想提供一對夫婦專門用於初始化該結構將使用一些數學運算來設置屬性。
init(value: Double, tolerance: Percentage) {
self.lower = value * (1 - tolerance)
self.upper = value * (1 + tolerance)
}
init(value: Measurement, tolerance: Percentage) {
self.lower = value.value * (1 - tolerance)
self.lower = value.value * (1 - tolerance)
}
結果應該明顯是兩個不同的結構,其中A是一個Double
或Measurement
。
但我該怎麼做?
我無法在定義中提供專門的init方法,因爲編譯器會抱怨Double is not convertible to A
。 OK ......
我不能提供的特定類型(where A == Double
),因爲編譯器限制單個擴展在init方法抱怨:
相同類型的要求使得泛型參數「A」非通用
也許我應該使用哪個都Double
和Measurement
符合在初始化的協議,但是這似乎很奇怪,因爲Bounds
結構應該只關心它們都符合Comparable
。
我覺得我要麼錯過了一些非常簡單的事情,要麼嘗試着去做一些真正被泛型所誤導的東西。這是什麼,所以?
如何定義「百分比」和「測量」? –