Objective-C vs Swift (phần 1)

Khởi tạo một đối tượng trong Objective-C:

NSDate *myDate = [[NSDate alloc] init];

Trong đó, NSDate là tên Class

*myDate là tên đối tượng cần khởi tạo (thực chất đây chỉ là con trỏ, trỏ đến địa chỉ của đối tượng được đặt tên là myDate trong vùng nhớ.

[NSDate alloc]: Đăng lý một vùng nhớ dạng NSDate trong bộ nhớ.
init: Khởi tạo bộ nhớ vùng nhớ vừa đăng ký với bộ nhớ.

Trong Swift:

var myDate = NSDate()

Về bản chất, đoạn code này tương đương với:

var myDate: NSDate = NSDate()

Tuy nhiên, trình biện dịch sẽ tự hiểu, giống như khi  khai báo

var aNumber = 9 thì trình biên dịch sẽ tự hiểu aNumber thuộc type Int.

Cách gọi một method (method là cách gọi của function khi làm việc với Class):

Objective-C:
[myObject simpleMethod];
[myObject methodWithParameter: 123];
[myAVQueuePlayer insertItem:newSong afterItem: currentSong]

Swift:

myObject.simpleMethod()
myObject.simpleMethod(123)
myAVQueuePlayer.insertItem(newsong, afterItem: currentSong)

– Khởi tạo một đối tượng kèm value:
Objective-C:
NSURL *myURL = [[NSURL alloc] initWithString: "www.ikhoai.com"];

SKSpriteNode *box = [[SKSpriteNode alloc] initWithColor: color size:size];

Swift:
var myURl = NSURL(string:"www.ikhoai.com")
var box = SKSpriteNode(color: color size: size)

Nếu không có parameter, Swift sẽ tự hiểu là đối tượng myURL đã được init (khởi tạo), nếu init cùng với một value nào đó, value này sẽ được đưa vào trong ngoặc. Ở đây, có một điểm cần lưu ý là, khi một object (đối tượng) của Swift sử dụng method đã được định nghĩa trong Objective-C (hiểu là mapping method của Objective-C để dùng trong Swift) thì tên của parameter sẽ được bỏ đi “init” và “initWith“. Có thể nhận thấy rõ trong 02 ví dụ trên, khi “initWithString” đã được rút gọn là thành “string“.

%d bloggers like this: