Здесь у меня есть пример объекта, соответствующего ExpressibleByStringLiteral
struct Foo: ExpressibleByStringLiteral {
var raw: String
init(stringLiteral value: String) {
self.raw = value
}
}
Теперь использовать это можно так же просто, как эти
func bar(foo: Foo) {}
let foo1: Foo = "example"
let foo2 = "example" as Foo
bar(foo: "example")
bar(foo: foo1)
bar(foo: foo2)
Но выполнить следующее не получится
let string: String = "example"
bar(foo: string) // Cannot convert value of type 'String' to expected argument type 'Foo'
let foo: Foo = string // Cannot convert value of type 'String' to specified type 'Foo'
bar(foo: string as Foo) // Cannot convert value of type 'String' to type 'Foo' in coercion
// Even string interpolation doesn't work which is weird because it's a string
bar(foo: "\(string)" // Cannot convert value of type 'String' to expected argument type 'Foo'
Не String
также не соответствует ExpressibleByStringLiteral
? Я пробовал это с другими ExpressibleBy
типами, и это, кажется, поведение везде.
Есть ли обходной путь, который я могу использовать здесь?