如何在IOS程序中使用equalTo方法

时间:2015-05-28 03:12:40

标签: ios block masonry

我对iOS块有疑问;

MASConstraint.h(iOS第三方库)

有一个方法定义:

- (MASConstraint * (^)(id attr))equalTo  ;

我找不到方法

的参数

但我可以看到很多人用它:

[subViews mas_makeConstraints:^(MASConstraintMaker *make) {
    make.edges.equalTo(self.view);
}];

我不理解它,因为我认为方法(equalTo方法)没有形式参数。

但为什么代码make.edges.equalTo(self.view)是真的???

我需要你的帮助,非常感谢。

2 个答案:

答案 0 :(得分:1)

(MASConstraint * (^)(id attr))equalTo是一个函数指针定义,返回值是MASConstraint,它有一个参数,它是一个' id' object,可以表示任何对象类型,称为attr

所以equalTo是变量,你可以像函数一样使用它,所以对于make.edges.equalTo(self.view),参数是self.view,而且equalTo返回MASConstraint对象

答案 1 :(得分:0)

方法(equalTo方法)确实有形式参数,它需要一个名为attr的参数,参数是一个' id'宾语。 由于块的格式很难记住,我个人喜欢使用这个网站(http://fuckingblocksyntax.com)来帮助我解决块的格式。该名称比块语法本身更容易记住:

http://fuckingblocksyntax.com

如果您无法在其中加载包含错误字词的网址,则可以使用此镜像:http://goshdarnblocksyntax.com

fuckingblocksyntax website

块声明语法列表

全程,让

  • return_type是object / primitive / etc的类型。您想要返回(通常void
  • blockName是您正在创建
  • 的块的变量名称
  • var_type是类型对象/ primitive / etc。你想作为一个参数传递(留空没有参数)
  • varName是给定参数的变量名称

请记住,您可以创建任意数量的参数。

阻止为变量

可能是宣言中最常见的。

return_type (^blockName)(var_type) = ^return_type (var_type varName)
{
    // ...
};

阻止为属性

就像将块声明为变量一样,但却略有不同。

@property (copy) return_type (^blockName) (var_type);

阻止作为参数

请注意,这与" Block as Arguments";在这种情况下,您要声明一个需要块参数的方法。

- (void)yourMethod:(return_type (^)(var_type))blockName;

阻止为参数

请注意,这与"块作为参数";在这种情况下,您正在调用一个需要带有匿名块的块参数的方法。如果您已经声明了一个块变量,那么将变量名称作为参数传递就足够了。

[someObject doSomethingWithBlock: ^return_type (var_type varName)
{
    //...
}];

匿名阻止

这在功能上是一个匿名块,但是将块分配给变量的语法只是将变量设置为等于匿名块。

^return_type (var_type varName)
{
    //...
};

typedef阻止

这允许您设置一个短名称,可以在声明块期间像任何其他类名一样引用。

typedef return_type (^blockName)(var_type);

稍后使用blockName而不是标准块声明语法,只需替换。

内联块

这可以说是块的利用率较低,但可能仍然有其地位。内联块是在实例化后立即调用的匿名块。

^return_type (var_type varName)
{
    //...
}(var);

内联块主要用于范围偏移,大致相当于简单的大括号分隔代码块。

{
   //...
}

递归块

这允许您从自身调用一个块,创建一个可以在回调和GCD调用期间使用的循环。这种实例化方法在ARC中没有保留周期。

__block return_type (^blockName)(var_type) = [^return_type (var_type varName)
{
    if (returnCondition)
    {
        blockName = nil;
        return;
    }

    // ...
} copy];
blockName(varValue);

返回块

方法可以返回一个块,

- (return_type(^)(var_type))methodName
{
    // ...
}

一个函数,如果有点奇怪。

return_type (^FunctionName())(var_type)
{
    // ...
}

补遗

如果我错过了任何内容,请在评论中告诉我,我会研究/添加它们。

哦,在Swift ......

blockName = (varName: var_type) -> (return_type)

它几乎就像是一种语言功能。