亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

僅在異步函數完成執行后運行代碼

僅在異步函數完成執行后運行代碼

梵蒂岡之花 2019-11-04 10:06:24
總的來說,我對Swift和Xcode還是比較陌生,并且發現很多困難要設法解決。我正在開發一個利用Parse.com后端服務器的應用程序。為了不阻塞主線程,每當應用程序從服務器下載任何內容時,它都會異步地在其他線程上完成。但是,其余代碼將繼續在主線程上執行,并且當應該從服務器下載的數據尚未下載時,它將崩潰。我想知道如何在異步函數完成后調用函數來運行,這對于單獨文件中的函數必須完成。我讀過閉包可能對此有所幫助,但是我發現那里的語法非常困難,對它的解釋將不勝感激。但是任何方式都將非常有幫助。謝謝
查看完整描述

3 回答

?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

好了,您只需在異步回調的末尾調用該函數。那就是異步回調結束的時候-異步回調中的其他所有東西都結束了!因此,例如:


func myMethod() {

    // ... code ...

    somebody.doSomethingWith(someObject, asynchronousCallback: {

        (thing, otherThing) in

        // ... do whatever

        // --> CALL THE FUNCTION!

    })

    // ... code ...

}

如果問題是,你不知道叫什么功能,你可以配置你周圍的功能/對象,以便有人能交出你的函數,而那么你在我說的“調用函數”在上面的斑點叫什么。


例如:


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 ...

}


查看完整回答
反對 回復 2019-11-04
?
肥皂起泡泡

TA貢獻1829條經驗 獲得超6個贊

擴展Matt的答案,您可以使myMethod一個以閉包作為參數的方法:


func myMethod(completionBlock: (result: String) -> ()) 

{

    // ... code ...

    somebody.doSomethingWith(someObject, asynchronousCallback: {

        (thing, otherThing) in

        // ... do whatever

        completionBlock(thing)

    })

    // ... code ...

}


查看完整回答
反對 回復 2019-11-04
?
莫回無

TA貢獻1865條經驗 獲得超7個贊

您能解釋一下如何交接職能嗎?我事先了解到,您可以在編寫“調用函數”的地方運行該函數,但是就像我說的那樣,該函數在另一個文件中。我現在正在處理的特定情況是,我編寫了一個函數,該函數首先檢查要查找的對象是否在本地數據存儲中,否則,它檢查服務器。由于我希望它可以在任何地方運行,因此將其放在單獨的文件中。但是我仍然需要它來調用調用它的類中的函數。再次感謝。

查看完整回答
反對 回復 2019-11-04
  • 3 回答
  • 0 關注
  • 711 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號