Почему доступ к описанию CustomStringConvertible не рекомендуется?
Документы Apple для CustomStringConvertible
сказать:
Доступ к типу
description
собственность напрямую […] не приветствуется.
Зачем?
Ниже приведен пример использования description
кажется полезным для меня. Как бы я получил те же результаты в противном случае?
func dontPrintNil(_ s: String?) {
if s == nil {
print("placeholder")
} else {
print(s!)
}
}
let s: String? = nil
dontPrintNil(s) // → placeholder
dontPrintNil(s?.description) // → placeholder
dontPrintNil(String(describing: s)) // → nil
dontPrintNil("\(s)") // → nil
1 ответ
В качестве подсказки предыдущая версия той же части документации гласит:
Примечание:
String(instance)
будет работать для любого типа , возвращая его, еслиinstance
бывает . Использование в качестве универсального ограничения или доступ к соответствующему типуdescription
напрямую, поэтому не рекомендуется.
На мой взгляд, это говорит о том, что их беспокоит то, что люди без нужды изо всех сил стараются придать ценностиCustomStringConvertible
, вместо того, чтобы использовать более удобныйString(describing:)
.
Если вы не знаете об этом инициализаторе, кастинг (или использование общих ограничений) действительно будет естественным.
Теперь — почему они в конце концов удалили логическую ссылку «следовательно» из комментария? Может быть, это просто побочный эффект переписывания, или, может быть, они считают, что это не так просто, что означает, что у нас все еще нет ответа.