Существует множество различных инициализаторов типа Double, но любой должен, кроме String, в качестве параметра.
Почему эта компиляция (и возвращает значение!) ???
if let d = Double("0xabcdef10.abcdef10") {
print(d)
}
itпечатает
2882400016.671111
импорт не требуется, пожалуйста, ребята, проверьте это с вашей средой ...
ОБНОВЛЕНИЕ Спасибо, ребята, моя проблема не в том, чтобы понять, какпредставляет значение Double в виде шестнадцатеричной строки.
Я путаюсь с несовместимой реализацией
protocol LosslessStringCovertible
init?(_:) REQUIRED
Instantiates an instance of the conforming type from a string representation.
Declaration
init?(_ description: String)
И Double, и Int соответствуют LosslessStringCovertible (Int косвенно, через соответствие FixedWidthInteger)
В начале я начал с
public func getValue<T: LosslessStringConvertible>(_ value: String)->T {
guard let ret = T.init(value) else {
// should never happen
fatalError("failed to assign to \(T.self)")
}
return ret
}
// standart notation
let id: Int = getValue("15")
// hexadecimal notation
let ix: Int = getValue("0Xf") // Fatal error: failed to assign to Int
OK, это детали реализации, поэтому я решил реализовать его самостоятельно, который принимает строку с двоичной, октальной, шестнадцатеричной нотацией
затем я проделал то же самое для Double и, протестировав его, обнаружил, что когда я забыл импортировать свой LosslessStringConvertibleExt, мои тесты прошли для ожидаемого Double, где строка была шестнадцатеричнойв десятичной записи.
Спасибо LeoDabus за Ваш комментарий со ссылкой на документы, который я не нашел раньше (да, скорее всего, я ослеп, это спасло меня немногочасы: -)
Я прошу прощения у всех вас за «глупый» вопрос.