相关疑难解决方法(0)

这种形式的范围如何称为?

我或多或少偶然发现了这种形式的范围

DataSource *dataSource =({
    NSInteger idx = [[self.tableView indexPathForSelectedRow] row];
    DataSource *dataSource = [DataSource new];
    dataSource.address = self.destinations[idx][0];
    dataSource.name    = self.destinations[idx][1];
    dataSource;
});
Run Code Online (Sandbox Code Playgroud)

我认为这是一种创建和实例化对象和变量的好方法,因为临时变量只有在需要创建我真正需要和关心的对象时才会存在.在idx我将内部写入dataSource外部时dataSource,上面的代码将会消失,因为范围将很快被留下.
此外,我发现一个吸引人的事实是完全实例化和配置的对象将被设置为外部对象.
实际上我甚至不知道这是C或Objective-C功能还是添加到clang的语法糖果.


@Unheilig
这是组织代码的语法.它不像块或闭包.在代码的末尾,您只需要一个完全实例化和配置的对象.

如果您只需要一个对象将它作为参数传递给方法,这会派上用场,但该对象的配置需要多个语句.您可以传入语句表达式,而不是将其分配给本地临时变量.

[[MYViewController alloc] initWithDataSource:({
    NSInteger idx = [[self.tableView indexPathForSelectedRow] row];
    DataSource *dataSource = [DataSource new];
    dataSource.address = self.destinations[idx][@"address"];
    dataSource.name    = self.destinations[idx][@"name"];
    dataSource;
})];
Run Code Online (Sandbox Code Playgroud)

在非ARC环境中,您甚至可以在表达式语句中调用autorelease.

所以它只是关于代码组织和我猜的很多个人品味.

c objective-c clang

3
推荐指数
1
解决办法
357
查看次数

是否有可能(如果是这样,如何)将块的返回值赋给变量?

是否可以将块的返回值赋给变量?

例如,我知道可以这样做:

NSString *(^sampleBlock)(void) = ^NSString *(void)
{
    return @"sampleString";
};

NSString *string = sampleBlock();
Run Code Online (Sandbox Code Playgroud)

但我想实现类似的东西(以下语法不正确):

NSString *string = ^NSString *(void)
{
    return @"sampleString";
};
Run Code Online (Sandbox Code Playgroud)

我一直在浏览几个解释块语法的站点,例如fuckingblocksyntax.com,但这种情况没有考虑到.我知道它可以通过很多方式完成,我只是想这样做,出于可读性目的.

有谁知道这实际上是否可行?

谢谢

objective-c objective-c-blocks

2
推荐指数
1
解决办法
79
查看次数

在Objective-C中使用带有三元运算符的块

有没有办法在Objective-C中使用带三元运算符的块?

我正在尝试做类似的事情:

[self evaluate] ? ^{
    // do somethings
} : ^{
    // do something else
}
Run Code Online (Sandbox Code Playgroud)

objective-c objective-c-blocks

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

标签 统计

objective-c ×3

objective-c-blocks ×2

c ×1

clang ×1