swift reloadData не работает [дубликат]

Почему не просто что-то вроде:

std::ofstream ofs;
...

ofs << my_str;

, а затем:

std::ifstream ifs;
...

ifs >> my_str; 
7
задан Acoop 8 May 2015 в 22:01
поделиться

2 ответа

Ну, вы просто вызываете функцию в конце асинхронного обратного вызова. То есть, когда асинхронный обратный вызов закончился - это когда все остальное в асинхронном обратном вызове закончилось! Итак, например:

func myMethod() {
    // ... code ...
    somebody.doSomethingWith(someObject, asynchronousCallback: {
        (thing, otherThing) in
        // ... do whatever
        // --> CALL THE FUNCTION!
    })
    // ... code ...
}

Если проблема заключается в том, что вы не знаете, знаете , какую функцию вызывать, вы можете настроить свою окружающую функцию / объект, чтобы кто-то мог hand вы используете функцию, которая является тем, что вы называете в месте, где я сказал «вызвать функцию» в приведенном выше.

Например:

func myMethod(f:() -> ()) { // we receive the function as parameter
    // ... code ...
    somebody.doSomethingWith(someObject, asynchronousCallback: {
        (thing, otherThing) in
        // ... do whatever
        // --> CALL THE FUNCTION, by saying:
        f()
    })
    // ... code ...
}
13
ответ дан matt 16 August 2018 в 14:22
поделиться
  • 1
    Можете ли вы объяснить, как сдать функцию? Я заранее понял, что вы запускаете функцию, где вы написали & quot; вызов функции, & quot; но функция, как я уже сказал, находится в другом файле. В конкретном случае, с которым я сейчас работаю, я написал функцию, которая сначала проверяет, находится ли объект, который ищет, в локальном хранилище данных, а если нет, он проверяет сервер. Поскольку я хочу, чтобы это выполнялось повсюду, я помещаю его в отдельный файл. Но мне все же нужно, чтобы он вызывал функции в классе, который его называл. Еще раз спасибо. – Acoop 8 May 2015 в 22:28
  • 2
    Я могу, конечно, объяснить это лингвистически . В Swift функции являются первоклассными гражданами, поэтому функция A может передать функцию B функции C, которая может хранить функцию B. Тогда функция C или какая-либо другая функция с доступом к сохраненной функции B может вызвать function B. Вот как работают все обратные вызовы. Когда вы говорите UIView.animateWithDuration() { ... }, это то, что вы передаете Cocoa - функция, которую он вызывается для выполнения анимации. См. Также мою книгу: apeth.com/swiftBook/ch02.html#_function_as_value – matt 8 May 2015 в 23:07
  • 3
    Однако, как вы решите сделать это архитектурно зависит от вас. В приведенном выше примере myMethod может принимать функцию как параметр; то при «вызове функции» вы называете это. Но есть много других возможных сценариев. См. Этот пример кода для примера: github.com/mattneub/Programming-iOS-Book-Examples/blob/master/… – matt 8 May 2015 в 23:10
  • 4
    И я пересмотрел свой ответ, чтобы проиллюстрировать идею получения функции, чтобы вы могли ее назвать позже. – matt 8 May 2015 в 23:16

Расширяя ответ Мэтта, вы можете сделать myMethod методом, который принимает замыкание в качестве параметра:

​func​ ​myMethod​(​completionBlock​: (result: String) -> ()) 
{
    // ... code ...
    somebody.doSomethingWith(someObject, asynchronousCallback: {
        (thing, otherThing) in
        // ... do whatever
        completionBlock(thing)
    })
    // ... code ...
}
3
ответ дан Duncan C 16 August 2018 в 14:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: