Невозможно наследовать от 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 }
, хотя.