Skip to content

Latest commit

 

History

History
60 lines (44 loc) · 2.06 KB

Fun interface.md

File metadata and controls

60 lines (44 loc) · 2.06 KB

Fun interface

Статус Ожидание Реальность
🚫 С помощью такого протокола можно более простым синтаксисом описать лямбду В Swift нельзя создать анонимный класс

Пояснения

В Kotlin-е при помощи fun interface-ов можно более удобным синтаксисом описывать создание анонимных лямбд:

fun interface FunInterfaceExample {
    fun singleFunctionInInterface(funInterfaceExample: String): String
}

interface NotFunInterface {
    fun singleFunctionInInterface(funInterfaceExample: String): String
}

private fun example() {
    val notFun = object : NotFunInterface {
        override fun singleFunctionInInterface(funInterfaceExample: String): String {
            return "return"
        }

    }

    val listener = FunInterfaceExample {
        println("it: ${it}")
        "some return value"
    }
}

В Swift нет аналогичного синтаксиса для описания анонимных классов. Можно, конечно, делать как в одном из ответов на StackOverflow, но это кажется каким-то большим overhead-ом:

class EmptyClass {

    var someFunc: () -> () = { }

    init(overrides: EmptyClass -> EmptyClass) {
        overrides(self)
    }
}

// Now you initialize 'EmptyClass' with a closure that sets
// whatever variable properties you want to override:

let workingClass = EmptyClass { ec in
    ec.someFunc = { println("It worked!") }
    return ec
}

workingClass.someFunc()  // Outputs: "It worked!"

Оглавление