gpt4 book ai didi

ios - 从 block 内部返回方法对象

转载 作者:行者123 更新时间:2023-11-30 12:38:06 26 4
gpt4 key购买 nike

我想知道如何正确执行以下操作:我有一个返回 NSData 对象的方法。它从 UIDocument 获取 NSData 对象。 NSData 对象可能会变得很大,因此我想确保它在响应开始之前已完全加载。因此,我想从 block 本身返回该方法的值。所以像这样:

- (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
}
}];
}

这会导致错误,因为返回显然引用了 block 返回

如何在不必使线程阻塞 wait/while 循环的情况下完成此操作?

谢谢。

最佳答案

你不能。接受您尝试执行的异步操作这一事实,并将完成 block 参数添加到您的 getMyData 方法中,该方法在调用内部完成处理程序时调用。 (并从方法签名中删除return):

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

Swift 中也存在同样的问题,您可以添加类似的完成 block :

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

关于ios - 从 block 内部返回方法对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42612553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com