Это, конечно, возможно.Однако вы должны использовать свой собственный протокол и добавить значение по умолчанию к этому протоколу:
protocol MyRawRepresentable: RawRepresentable {
static var defaultValue: Self { get }
}
class Person {
init<T: MyRawRepresentable>(raw: T = T.defaultValue) {}
}
enum Child: String, MyRawRepresentable {
case johnDoe
static let defaultValue: Child = .johnDoe
}
Однако существует еще одна проблема.Как вы будете определять универсальный тип, если будете использовать значение параметра по умолчанию, и все, что у вас будет, будет просто Person.init()
?
Единственное решение, которое я вижу, это также указать универсальный тип по умолчанию, что означает, что вы действительно хотите:
class Person {
init<T: RawRepresentable>(raw: T) {
}
convenience init() {
self.init(raw: Child.johnDoe)
}
}
Если вы на самом деле не хотите сделать Person
общим классом, потому что тогда вы можете просто использовать
Person<Child>.init()