ios – 从块内返回方法对象

ios – 从块内返回方法对象,第1张

概述我想知道如何正确地执行以下 *** 作:我有一个返回NSData对象方法.它从UIDocument获取NSData对象. NSData对象可能变大,所以我想确保在响应开始之前它已完全加载.因此,我想从块本身返回方法的值.所以这样的事情: - (NSData*)getMyData { MyUIDocument *doc = [[MyUIDocument alloc] initWithFileURL:f 我想知道如何正确地执行以下 *** 作:我有一个返回NSData对象的方法.它从UIdocument获取NSData对象. NSData对象可能变大,所以我想确保在响应开始之前它已完全加载.因此,我想从块本身返回方法的值.所以这样的事情:
- (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    }  }];}

这会导致错误,因为返回显然是指块的返回.

如何在不必使线程阻塞等待/循环的情况下完成此 *** 作?

谢谢.

解决方法 你不能.接受这样一个事实,即你要做的是异步并向你的getMyData方法添加一个完成块参数,该方法在调用内部完成处理程序时调用. (并从方法签名中删除返回):
- (voID)getMyDataWithCompletion:(voID(^)(NSData *data))completion {    MyUIdocument *doc = [[MyUIdocument alloc] initWithfileURL:fileURL];    [doc openWithCompletionHandler:^(BOol success) {        completion((success ? doc.myResponseData : nil));    }];}

swift中存在同样的问题,您可以添加类似的完成块:

func getMyData(completion: ((data: NSData?) -> VoID) {    data = ...    completion(data)}
总结

以上是内存溢出为你收集整理的ios – 从块内返回方法对象全部内容,希望文章能够帮你解决ios – 从块内返回方法对象所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1101771.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存