第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

從內(nèi)部塊返回方法對象

從內(nèi)部塊返回方法對象

慕的地6264312 2019-07-13 16:01:38
我想知道如何正確地執(zhí)行以下操作:我有一個(gè)方法,即返回NSData對象。它得到了NSData對象的UIDocument..這個(gè)NSData對象可以變大,因此我希望確保在響應(yīng)啟動(dòng)之前完全加載它。因此,我想從塊本身中返回方法的值。所以就像這樣:- (NSData*)getMyData {   MyUIDocument *doc = [[MyUIDocument alloc] initWithFileURL:fileURL];   [doc openWithCompletionHandler:^(BOOL success) {     if (success) {       return doc.myResponseData; // this is to be the return for the method not the block     }   }];}這會(huì)導(dǎo)致錯(cuò)誤,因?yàn)閞eturn顯然是指block氏return.我如何才能做到這一點(diǎn),而不必讓線程阻塞等待/同時(shí)循環(huán)呢?謝謝。
查看完整描述

3 回答

?
有只小跳蛙

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個(gè)贊

您不能。接受這樣一個(gè)事實(shí):您要做的是異步的,并將一個(gè)完成塊參數(shù)添加到您的getMyData方法,該方法在調(diào)用內(nèi)部完成處理程序時(shí)調(diào)用。(并移除return方法簽名):

- (void)getMyDataWithCompletion:(void(^)(NSData *data))completion {
    MyUIDocument *doc = [[MyUIDocument alloc] initWithFileURL:fileURL];
    [doc openWithCompletionHandler:^(BOOL success) {
        completion((success ? doc.myResponseData : nil));
    }];}

在WAST中也存在同樣的問題,您可以添加一個(gè)類似的完成塊:

func getMyData(completion: ((data: NSData?) -> Void) {
    data = ...
    completion(data)}


查看完整回答
反對 回復(fù) 2019-07-13
?
慕尼黑8549860

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個(gè)贊

OPEN方法是異步的,這就是為什么您必須在打開完成時(shí)提供一個(gè)要運(yùn)行的塊。您需要復(fù)制它,并使您的方法也收到一段代碼,當(dāng)打開完成時(shí),您將執(zhí)行這些代碼塊。

您還應(yīng)該傳遞正在包裝或創(chuàng)建錯(cuò)誤的調(diào)用的成功參數(shù),您需要這樣做,以便調(diào)用代碼能夠采取正確的操作。

- (void)getMyDataWithCompletion:(void(^)(NSData *data, BOOL success))completion{
  MyUIDocument *doc = [[MyUIDocument alloc] initWithFileURL:fileURL];
  [doc openWithCompletionHandler:^(BOOL success) {
    completion(doc.myResponseData, success);
  }];}



查看完整回答
反對 回復(fù) 2019-07-13
  • 3 回答
  • 0 關(guān)注
  • 570 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)