Calling methods 调用方法

此后有一个专门关于「方法」(method)的章节,我将逐个在案例的基础上,介绍常见的数据类型。但在此之前,我至少想告诉你「方法」在 Objective-C 看起来是什么样子的。

我们首先来回忆一下 Swift 里的写法:

let myObject = new MyObject()

但在 Objective-C 里,不是这样的。首先, "new" 变成了你向 MyObject 发送的一个消息,所以变成了:

MyObject *myObject = [MyObject new];

在这段代码里,首先要写一对中括号([]),在里面先写你的对象名称(MyObject),然后写你的消息名称(new)。

小提示:尽管苹果公司的人在技术上叫它「发送消息」(sending a message),但是一般我们都会叫它「调用方法」(calling a method)。

然而当你想同时调用两个方法的时候,事情就变得棘手了。在 Swift 中你可能会这样写:

myObject.method1().method2()

但是在 Objective-C 里,你要写很多的中括号,像这样:

[[myobject method1] method2]

当你在写 Objective-C 的时候,你可能会在一行里写两个,三个甚至四个中括号,尽管 Xcode 会帮你检查这些括号是否补全,但出错了还是非常麻烦。

一种特殊情况下你会愿意在一行里使用两对中括号,就是创建一个新对象。之前我们用的是 new 方法,就是为一个对象分配了内存,并初始化。当然你也可以把这两步分开来执行,先分配内存,再初始化。就像这行代码:

MyObject *myObject = [[MyObject alloc] init];

内部括号里的 alloc 先运行,留出足够的内存来存储对象,接着运行 init,把默认值放入对象中,将它初始化。分离这两步是为了辅助函数,也就是在 Swift 中的初始化器,让你可以从文件、链接及其他东西里创建字符串。

Objective-C 方法调用看起来与 Swift 类似,区别只是:使用方括号,且不要在参数之间使用逗号。没有逗号也就意味着,在参数名的冒号后面,也不要加空格。

下面是在 Swift 和 Objective-C 调用方法的例子:

myObject.executeMethod(hello, param2: world)
[myObject executeMethod:hello param2:world];

我们将在后面的章节里,进一步阐述相关内容。

results matching ""

    No results matching ""