相关疑难解决方法(0)

块声明语法列表

目标C中的块语法(实际上是C,我推测)是众所周知的不协调.将块作为参数传递看起来与将块声明为ivars不同,后者看起来与typedef块不同.

是否有一个完整的块声明语法列表,我可以随时查看以供快速参考?

syntax objective-c objective-c-blocks

276
推荐指数
6
解决办法
8万
查看次数

Objective-C++ 11 - 为什么我们不能将块分配给lambda?

所以,我刚刚升级到Xcode 4.4,我注意到在更改日志中:

Apple LLVM编译器支持其他C++ 11功能,包括lambdas

哪个太棒了!所以我开始编码,我找到了一些东西:

  1. Lambdas可分配给Objective-C块:

    void (^block)() = []() -> void { 
        NSLog(@"Inside Lambda called as block!");
    };
    
    block();
    
    Run Code Online (Sandbox Code Playgroud)
  2. std::function 可以持有Objective-C块:

    std::function<void(void)> func = ^{
        NSLog(@"Block inside std::function");
    };
    
    func();
    
    Run Code Online (Sandbox Code Playgroud)
  3. 我们不能将一个Objective-C块分配给lambda:

    auto lambda = []() -> {
        NSLog(@"Lambda!");
    };
    
    lambda = ^{ // error!
        NSLog(@"Block!");
    };
    
    lambda();
    
    Run Code Online (Sandbox Code Playgroud)

为什么是这样?鉴于我们上面所看到的,这两者在语义上是否应该是等价的?

c++ lambda objective-c objective-c++ c++11

15
推荐指数
1
解决办法
3554
查看次数