Почему доступ к описанию 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:).
Если вы не знаете об этом инициализаторе, кастинг (или использование общих ограничений) действительно будет естественным.

Теперь — почему они в конце концов удалили логическую ссылку «следовательно» из комментария? Может быть, это просто побочный эффект переписывания, или, может быть, они считают, что это не так просто, что означает, что у нас все еще нет ответа.

Другие вопросы по тегам