Как избежать замыкания в swift и как выполнить его в Java - PullRequest
0 голосов
/ 07 февраля 2019

Я занимаюсь разработкой приложения для iOS и Java, и в моей программе swift у меня есть функция, использующая экранирующее замыкание, которое передает массив строк.В быстром, это определение функции выглядит как

func foo(uid: String, onComplete: @escaping([String]) -> Void { 
    onComplete(someStringArray)
}

, а его вызов функции -

class.foo(uid: player1, onComplete { (stringArray) in {
    do something with stringArray
}

. Теперь мой главный фокус - выяснить это для Java.БОЛЬШАЯ проблема в том, что я использую базу данных Google Firebase, которая загружает данные асинхронно, поэтому простое создание функции возврата не будет работать, так как функция возврата будет вызвана до загрузки всех данных.Я слышал о, возможно, перезвонках, но я решил сначала спросить здесь, прежде чем потратить драгоценные часы на неправильное задание.Я думаю, что Java-версия будет

void foo(String uid, onComplete...) { 
onComplete(someStringArray)
}

В любом случае, я надеюсь, что я был максимально подробен и благодарен за любую помощь!-Бен

1 Ответ

0 голосов
/ 07 февраля 2019

Вы можете использовать Лямбда-выражения выражения.

Простите за присвоение имен функциям, но вот пример:

public class LambdaExample{

    interface Description {
        void describeThis(String str);
    }

    public static void getDescription(Description description, String str){
        description.describeThis(str);
    }

    public static void main(String []args){
        getDescription(new Description() {
            @Override
            public void describeThis(String str) {
                System.out.println(str + " is handsome");  // Meow2x is handsome
            }
        }, "Meow2x");
    }
}
...