Расширение FloatingPoint - инициализация с другим типом FloatingPoint - PullRequest
0 голосов
/ 07 сентября 2018

Мне нужно написать инициализатор для любого значения FloatingPoint, которое может принимать другой тип FloatingPoint, и преобразовать его в Self. Это возможно в swift? Я пробовал что-то вроде этого:

init<FloatingPointType: FloatingPoint>(_ value: FloatingPointType) {
    guard let sameValue = value as? Self else {
        // Pass throu double to get best precision
        self.init(Double(value))
        return
    }
    self = sameValue // The same type
}

Но это просто создает бесконечный цикл. Проблема заключается в создании нового себя, не существует инициализатора, который принимает какой-либо другой FloatingPoint. Я думаю, что это может быть невозможно, но, возможно, есть какой-то способ достичь этого.

1 Ответ

0 голосов
/ 07 сентября 2018

Такие стандартные инициализаторы уже существуют в стандартной библиотеке:

let a: Double = Double(3.625)

//From Double to Float and Float80
let b: Float = Float(a)
let c: Float80 = Float80(a)

//From Float to Double and Float80
let d: Double = Double(b)
let e: Float80 = Float80(b)

//From Float80 to Double and Float
let f: Double = Double(c)
let g: Float = Float(c)

Вы можете найти его прямо здесь :

public init<Source : BinaryFloatingPoint>(_ value: Source) {
    self = Self._convert(from: value).value
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...