Переопределить описание URL

Первоначально я пытался использовать что-то вроде этого:

extension URL: CustomStringConvertible{

    public override var description: String {
        let url = self

        return url.path.removingPercentEncoding ?? ""
    }
}

После исправления кода предупреждения компилятор стал:

extension URL{

    public var description: String {
        let url = self

        return url.path.removingPercentEncoding ?? ""
    }
}

но

print(fileURL) все еще показывает старое описание URL с процентами.

1 ответ

Решение

Вы не можете переопределить метод в расширении. То, что вы пытаетесь сделать, невозможно в Swift. Это возможно в ObjC (на NSURL), используя методы, но это никогда не должно выполняться в производственном коде. Даже если вы можете заставить вышеописанное работать в Swift с помощью некоторых хитростей, вы никогда не должны использовать это в производственном коде по той же причине. Это может легко повлиять на вас очень неожиданными способами (например, это может сломать NSCoding реализации, которые ожидают description работать определенным образом.

Если вам нужен этот стиль строки, создайте для него метод и вызывайте его, когда захотите. Не модифицируйте description в существующем классе.

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