我刚开始使用Objective-C,我想了解以下代码行的含义,因为我在objective-c中随处可见,但我并没有100%完全理解它:
- (id)initWithName:(NSString *)name;
Run Code Online (Sandbox Code Playgroud)
我知道上面这行是一个传递一个参数的实例方法,我不明白的是 (NSString *)name。
另一个例子是:
-(NSString *)name;
Run Code Online (Sandbox Code Playgroud)
或者
person.height = (NSObject *)something;
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
在这一行:
- (id)initWithName:(NSString *)name;
Run Code Online (Sandbox Code Playgroud)
(NSString *)
只是参数的类型 - 一个字符串对象,它是 Cocoa 中的 NSString 类。在 Objective-C 中,您总是在处理对象引用(指针),因此“*”表示参数是对NSString
对象的引用。
在这个例子中:
person.height = (NSObject *)something;
Run Code Online (Sandbox Code Playgroud)
东西有点不同的正在发生的事情:(NSObject *)
再指定一个类型,但是这一次它是一个“类型转换”的操作-这意味着拿“东西”的对象引用(这可能是一个NSString
,NSNumber
或......)和将其视为对NSObject
.
更新 - 当谈论 Objective-C 对象时(与 int 或 float 等原始类型相反),一切最终都是一个指针,因此强制转换操作意味着“获取这个指针 anX
并将其视为指向 a Y
”。例如,如果您有一个包含NSArray
泛型NSObject
s的容器类(如),但您知道这些对象实际上是字符串,您可能会说:
NSString *myString = (NSString *)[myArray objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)
这意味着“从数组中检索第一个对象,将其视为字符串”。
强制转换实际上并没有转换值,它只是对编译器说“嘿,我知道我在这里将 X 分配给 Y,所以不要给我警告”。
归档时间: |
|
查看次数: |
5710 次 |
最近记录: |