【问题标题】:Xcode fails to recognize dispatch_once block as correctXcode 无法将 dispatch_once 块识别为正确的
【发布时间】:2018-10-11 14:46:16
【问题描述】:

我在整个代码库的多个不同地方都使用这种通用代码风格,但是在一个地方,Xcode 突然不喜欢它了:

static dispatch_once_t once;
dispatch_once(&once, ^{
    ...
});

它显示以下错误:

Incompatible block pointer types passing 'void *(^)(void)' to parameter of type 'dispatch_block_t _Nonnull' (aka 'void (^)(void)')

样式与代码的其他部分完全相同,所以我有点不知道这里到底是什么问题。

在块的右大括号处也有如下错误:

Control may reach end of non-void block

【问题讨论】:

  • 你确定你没有遗漏任何括号或有不需要的退货声明,很难用你发布的内容来判断。
  • @TejaNandamuri 是的,有一个不需要的退货声明。我只是不清楚问题是什么。这只是我使用 Objective-C 的第二周 :)

标签: ios objective-c xcode grand-central-dispatch objective-c-blocks


【解决方案1】:

经过进一步检查,在我有 return nil; 的块中有一个实例(我已追溯添加了调度代码)

由于该返回语句 XCode 假定该块具有 void * 返回类型,它与 dispatch_once 的预期块签名不匹配,因此错误出现在块的开头而不是问题所在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 2020-01-27
    • 2018-07-18
    • 2013-07-06
    • 2021-05-13
    相关资源
    最近更新 更多