Можно ли наследовать пользовательский класс от String? - PullRequest
0 голосов
/ 22 февраля 2019

Я хочу использовать свой пользовательский класс в качестве строки.Возможно ли это в Swift?Например, я хочу сделать что-то вроде этого:

label.text = CustomClass()

1 Ответ

0 голосов
/ 22 февраля 2019

Невозможно наследовать от String в Swift.Это struct, и они не поддерживают наследование.

Одной из возможностей для показанного вами варианта использования является расширение UILabel* для переноса и развертывания вашего типа, учитывая, что он может преобразовать сам в и из строки.Другими словами, если у вашего класса есть следующие способности:

class CustomClass {
    var stringValue: String {
        // Create a string somehow
    }

    init(stringValue: String) {
        // Configure
    }
}

Тогда вспомогательное свойство в UILabel (или что-то еще) может скрывать эти операции для клиентов:

extension UILabel {
    var myText: CustomClass? {
        get { return self.text.flatMap(CustomClass.init(stringValue:) }
        set { self.text = newValue?.stringValue }
    }
}

, так чтоВы можете написать label.myText = instanceOfCustomClass.

При необходимости - т.е. вам нужно сделать это для нескольких типов - вы даже можете извлечь «преобразование в / из строки» в протокол, а не полагатьсяна конкретный конкретный тип.


* Я предполагаю, iOS здесь;тот же принцип применяется к любой вещи, которая имеет var text: String? { get set }, хотя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...