В Kotlin мы могли бы определить что-то, как показано ниже
inline fun <T> T.justApply(block: T.() -> Unit) {
block()
}
С этим мы могли бы сделать что-то, как показано ниже
class TestingClass {
fun printA() { print("A") }
fun printB() { print("B") }
}
val a: TestingClass? = TestingClass()
a?.apply {
printA()
printB()
}
В Swift, наиболее близкий, который я нашел, мы могли сделать, это сделать структуру и отправить в качестве параметра в закрытие, потому что я не могу сделать это T.<something>
и T.()
protocol ScopeFunc {}
extension ScopeFunc { // This is not nice, have to explicitly scope into an extension
@inline(__always) func justApply(block: (Self) -> ()) {
block(self)
}
}
Затем, чтобы использовать его, мы ' Я буду нуждаться в явном наследовании от него
class TestingClass {
func printA() { print("A") }
func printB() { print("B") }
}
extension TestingClass: ScopeFunc {} // This is not nice, have to explicitly make it inherit
let a: TestingClass? = TestingClass()
a?.justApply {
$0.printA() // This is not nice, need $0
$0.printB()
}
Есть ли способ заставить swift вести себя так, как имеет Kotlin, возможность определить обобщенную функцию c для типа T и заставить ее вызывать любая функция Т, через T.()
?