Есть протоколы для достижения инициализации с литералами.
Примеры: Используя ExpressibleByStringLiteral
, мы можем сделать следующее:
struct MyString: ExpressibleByStringLiteral {
let value: String
init(stringLiteral value: String) {
self.value = value
}
}
let str: MyString = "Hello World!" // It's the same as: `MyString(stringLiteral: "Hello World!")`
str.value // "Hello World!"
Также, с помощью используя ExpressibleByIntegerLiteral
, мы можем сделать следующее:
struct MyInt: ExpressibleByIntegerLiteral {
let value: Int
init(integerLiteral value: Int) {
self.value = value
}
}
let int: MyInt = 101 // It's the same as: `MyInt(integerLiteral: 101)`
int.value // 101
Мой вопрос:
Как мы можем применить те же логики c для структуры с универсальный c тип? Представьте, что у меня есть следующая структура:
struct MyCustom<T> {
let value: T
}
Что я хочу сделать, это:
let custom1: MyCustom = "Hello World!"
custom1.value // "Hello World!"
// OR (since its generic)
let custom2: MyCustom = 101
custom1.value // 101
Какому соответствующему протоколу соответствовать в этом случае?