Требуется разъяснение по использованию точечной записи литералов в Swift

Итак, я читаю о расширениях классов в документации Swift. Я понимаю назначение и функциональность расширений класса. Затем Apple предоставляет этот пример того, как расширить существующий тип:

extension Double {
    var km: Double { return self * 1_000.0 }
    var m: Double { return self }
    var cm: Double { return self / 100.0 }
    var mm: Double { return self / 1_000.0 }
    var ft: Double { return self / 3.28084 }
}

let oneInch = 25.4.mm
println("One inch is \(oneInch) meters")
// prints "One inch is 0.0254 meters"

let threeFeet = 3.ft
println("Three feet is \(threeFeet) meters")
// prints "Three feet is 0.914399970739201 meters"

Может ли кто-нибудь объяснить, почему и как можно использовать точечную нотацию для литерала с плавающей запятой?

В приведенном выше примере они используют запись через точку для значений 25,4 и 3 для доступа к вычисляемым свойствам класса Double. Apple не дает подробных объяснений, почему это можно сделать.


person Walter M    schedule 06.08.2015    source источник


Ответы (1)


Это стало возможным благодаря буквальным кабриолетам Swift:

http://nshipster.com/swift-literal-convertible/

Как отмечает великий Мэтт Томпсон в конце этой статьи:

Одна замечательная особенность литеральных преобразований заключается в том, что вывод типа работает даже без объявления переменной:

"http://nshipster.com/".host // nshipster.com

person Patrick Lynch    schedule 06.08.2015
comment
Вау! Спасибо тебе за это! Почему этого нет в документации Swift? ржунимагу. В любом случае спасибо за ответ на мой вопрос. Кстати, какую дополнительную быструю документацию вы порекомендуете. Теперь кажется, что я не смогу узнать все о swift, если буду использовать только собственную документацию Apple. - person Walter M; 07.08.2015
comment
Есть действительно умные люди с блогами и книгами: NS Hipster, Practical Swift и Скорость воздуха мои любимые. - person Patrick Lynch; 07.08.2015
comment
@WalterM Эх, я не думаю, что об этом стоит упоминать, особенно в начале. В том, что двойник есть двойник, нет ничего удивительного. Наоборот, тот факт, что другие языки не поддерживают методы и тому подобное в своих двойниках, будь то в их буквальном представлении или иным образом, это удивительно. Нет причин для этого произвольного ограничения - person Alexander; 18.09.2019