Как переопределить debugDescription для объектов NSDate в Swift

Я пытаюсь переопределить свойство debugDescription при отображении значения объектов NSDate в отладчике Xcode.

Мой код расширения:

import Foundation

extension NSDate {
   public override var debugDescription: String {
      return "FOOFOOFOO" 
   }

   public func yeah() -> String {
      return "yeah!"
   }
}

Я подтвердил, что файл с моим кодом расширения включен в цели тестового проекта, поскольку я могу вызвать функцию yeah и print успешно выполнить ее в выводе отладчика. Однако я не могу заставить свойство debugDescription использоваться.

Обратите внимание, что моя фактическая цель — сделать то, что я делал в Objective-C ранее (см. to-show-dates-in-local-timezone-ie-no">этот вопрос для получения подробной информации), но пока не могу понять, как это сделать в Swift.


person GusP    schedule 15.12.2015    source источник


Ответы (1)


это два отдельных протокола в Swift

struct S : CustomStringConvertible, CustomDebugStringConvertible {
    var description: String {
        return "description"
    }
    var debugDescription : String {
        return "debug description"
    }
}

let s = S()
print(s)        // description
debugPrint(s)   // debug description

... спасибо, нужно идти к Лео !!!

import Foundation
extension NSDate: CustomDebugStringConvertible {
    public override var debugDescription: String {
            return "FOO"
    }
}

debugPrint(NSDate()) // FOO
person user3441734    schedule 15.12.2015
comment
Это отлично работает для меня. Я думаю, что моя проблема больше связана с тем, как переопределить debugDescription (или description) для NSDate объектов с помощью метода extension. - person GusP; 15.12.2015
comment
Расширения @GusP не могут содержать сохраненные свойства, вы не можете повторно объявлять какое-либо свойство в расширении. вы можете переопределить свойство суперкласса... так что то, что вы пытаетесь сделать, невозможно. Если вам нужно какое-то особое поведение, вы все равно можете создать подкласс NSDate и переопределить там debugDescription. - person user3441734; 15.12.2015
comment
@LeoDabus: это приводит к ошибке: избыточное соответствие «NSDate» протоколу «CustomDebugStringConvertible». - person GusP; 15.12.2015
comment
Очень жаль, если это невозможно. Делать то же самое в Objective-C было намного лучше, чем создавать подклассы NSDate по всему моему коду. Я думаю, что на самом деле я бы предпочел просто делать преобразования в своей голове, чем создавать подклассы. Кроме того, вы действительно смогли успешно скомпилировать код Лео? - person GusP; 16.12.2015
comment
@GusP, конечно, то, что вы видите в моем примере, работает для меня, как и ожидалось. - person user3441734; 16.12.2015
comment
Хм, хорошо. Спасибо за подтверждение. Я получаю ошибку, о которой я упоминал выше, когда пытаюсь использовать этот код. Посмотрим, смогу ли я понять, почему это не работает для меня. - person GusP; 16.12.2015