Рассмотрим следующее перечисление
enum Text: Equatable {
case plain(String)
case attributed(NSAttributedString)
}
Я сделал его совместимым с ExpressibleByStringLiteral
extension Text: ExpressibleByStringLiteral {
public typealias StringLiteralType = String
public init(stringLiteral value: StringLiteralType) {
self = .plain(value)
}
}
Со всем этим я могу сделать следующее, как и ожидал :
let text: Text = "Hello" // .plain("Hello")
let text2: Text? = "Hello" // .plain("Hello")
Но я получаю следующие ошибки компилятора:
let nilString: String? = nil
let text3: Text? = nilString // Cannot convert value of type 'String?' to expected argument type 'Text?'
func foo(text: Text?) { /** foo **/ }
let text = "Hello"
foo(text: text) // Cannot convert value of type 'String' to expected argument type 'Text?'
func bar(text: Text?) { /** bar **/ }
bar(text: nilString) // Cannot convert value of type 'String?' to expected argument type 'Text?'
Как мне заставить их работать?
Я также пытался расширить Optional: ExpressibleByStringLiteral where Wrapped: ExpressibleByStringLiteral
, но это не помогло.