Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 区别:和。在Objective-C中_Ios_Objective C_Syntax_Notation - Fatal编程技术网

Ios 区别:和。在Objective-C中

Ios 区别:和。在Objective-C中,ios,objective-c,syntax,notation,Ios,Objective C,Syntax,Notation,因此,我是iOS新手,并且已经注意到,不仅可以使用。符号,但有:冒号 我的问题是这两种符号之间的区别是什么?它们是什么意思?什么时候使用?它们可以互换吗?什么时候最好用哪个 感谢您提供有关此事的所有信息 例如: 编辑: 我甚至见过一些使用“:”的例子。这是什么意思?我现在没有一个例子,如果我找到一个,我会更新这篇文章 点代表属性,:只是方法调用中参数名和值之间的分隔符 BOOL b = control.isActive; // Getting property value control.set

因此,我是iOS新手,并且已经注意到,不仅可以使用。符号,但有:冒号

我的问题是这两种符号之间的区别是什么?它们是什么意思?什么时候使用?它们可以互换吗?什么时候最好用哪个

感谢您提供有关此事的所有信息

例如:

编辑:


我甚至见过一些使用“:”的例子。这是什么意思?我现在没有一个例子,如果我找到一个,我会更新这篇文章

点代表属性,:只是方法调用中参数名和值之间的分隔符

BOOL b = control.isActive; // Getting property value
control.setIsActive = YES; // Setting property value

// The same using selectors:
BOOL b = [control isActive];
[control setIsActive:YES];
因此,您的示例可以改写为:

 [[self layer] setBorderColor:[[UIColor colorWithRed:0 green:0 blue:0 alpha:0.5] CGColor]];

不,它们不能互换。“.”的一个示例是在访问属性时:

myObj.someProperty = 10;
或者

在本例中,您正在访问对象的属性,该对象是类的实例

通过传递参数可以看到“:”的示例:

[myObj someMethod:10 secondParam:20 thirdParam:40];
在本例中,参数值在“:”后面。您不能执行以下操作:

[myObject someMethod.10 secondParam.20 thirdParam.40];
就像你不能说:

myObj:someProperty;
这些都是Objective-C的基础知识,我建议从一开始就用一本好书或参考书来学习它。

旁注:被称为冒号。分号是;。你的意思是冒号

你们所遇到的被称为点表示法,如果我没记错的话,这在Objective-C2007中是比较新的。当时,甚至直到今天,由于它造成的混乱,它一直备受争议

在Objective-C2.0中添加点表示法之前,括号表示法是调用方法的唯一方法,并且没有属性。所以你的例子应该是这样写的:

[[self layer] setBorderColor:[[UIColor blackColor] CGColor]];
几十年来,ObjC就是这样编写的。当ObjC2问世时,它为这种称为点表示法的方法添加了一个快捷方式

self.layer.borderColor = [[UIColor blackColor] CGColor];
理论上,点表示法只能用于属性。实际上,编译器允许您在任何时候使用具有正确签名的方法。这是其争议的一部分。现在有多个语法可以做同样的事情,当你使用其中一个的时候是模糊的。也就是说,点表示法非常流行,因为它稍微减少了输入,坦率地说,因为它看起来更像Java,我怀疑这就是它被使用的原因

点表示法可能令人困惑,因为它与结构表示法不明确。例如,您希望以下各项能够起作用:

self.frame.origin.x = 0.0;
不幸的是,self.frame是一个使用点表示法的方法调用,但是frame.origin和origin.x是结构访问,它们完全不同,并且与点表示法不兼容,因此无法编译上述内容。没有办法从代码中知道这一点;你只需要知道框架是如何工作的

尽管长话短说,但在大多数情况下:

self.foo       <=> [self foo]
self.foo = bar <=> [self setFoo:bar]

编译器只是为了方便程序员,将前者转换为后者。

请给出一个例子。有人能支持我的问题吗?这样我就不会反对,我正在努力建立我的声誉,这样我就可以获得更多的功能。但是人们似乎不喜欢我的问题。@cGetLegend:人们可能不喜欢你的问题,因为1它的原始版本不好,没有提供足够的细节,2这个问题在这里被问了很多次……如果你使用了搜索功能,你会找到你的答案。如果你想建立声誉,就在你的问题和答案上投入更多的精力。提供更多细节,举例说明,具体一点。我确实搜索了它,但没有找到我想要的一般答案。也许我看起来不够认真。这并不是说我有意提出多余或缺乏的问题。但有时直到有人要求我具体说明,我才意识到自己不够清楚,有时我在开始写文章时也不知道该如何提问。我会尽可能地使我的文章有用,以便像我这样处于类似职位的其他人可以从中受益。我已经查阅了一些基本资料,但我觉得我总能更多地了解Objective-C。你对一本好书有什么建议吗?我最好有一本数码版的?我不知道有哪本书不在上面。我建议你去看看亚马逊的Kindle部分,看看有很多书评人的书,他们的书评分数也很高。为什么第二个例子需要额外的括号?它也可以用self.layer表示吗?您重写的示例是错误的,它应该是:[[self layer]setBorderColor:[[UIColor colorWithRed:0 green:0 blue:0 alpha:0.5]CGColor]]@当然,我的错。哈哈哈,你说得对。那是冒号。我不知道为什么我把他们搞混了。谢谢,我会解决的。那真的很有用。谢谢你。现在你能告诉我什么时候会发生像“:.”这样的事情吗?我不知道在哪:。将是合法的ObjC。你有没有遇到过这个问题?在任何实际的代码中都没有,我只记得在一些示例代码示例中在线看到过它,它让我感到困惑 我很生气。如果我看到它来了,我会更新后。
self.frame.origin.x = 0.0;
self.foo       <=> [self foo]
self.foo = bar <=> [self setFoo:bar]