В Swift я могу создать протокол, который делает что-то вроде
protocol FoobarConvertible {
var foobar:String { get }
}
А затем расширить любой класс в системе с помощью соответствующей реализации
extension String : FoobarConvertible {
var foobar:String {
get {
return "foobar"
}
}
}
В Kotlin, я думаю, интерфейсы похожи на протоколы (?), И я могу объявить один из них следующим образом
protocol FoobarConvertible {
val foobar:String
}
Но что не очевидно для меня из документации (которая кажется кратким упражнением), так это то, как я расширил бы класс String Котлина, чтобы он соответствовал FoobarConvertible. Очевидно, я мог бы просто добавить метод расширения к строке Kotlin
val String.foobar:String
get() = "foobar"
Но это не позволяет использовать строки в качестве параметров, где FoobarConvertible является ожидаемым типом.