2014-06-22 16 views
7

Trong Swift, đôi khi, từ khóa là từ khóa đơn giản và một số từ khóa khác bắt đầu bằng số @.Từ khóa có và không có @ trong Swift

Ví dụ: weak, unowned, inout, class là đơn giản. Nhưng @final, @lazy bắt đầu bằng @.

Đôi khi, chúng tôi thậm chí có cả hai! Ví dụ: prefix@prefix, infix@infix.

Nó không hoàn toàn là kế thừa Objective-C vì chúng tôi có @class và không phải là class trong Mục tiêu-C. Tôi có thể hiểu lý do tại sao chúng tôi có class và không phải @class trong Swift, nhưng vì chúng tôi có @final hoặc @lazy, tôi đã nghĩ rằng nó phải là @weak và không phải là weak.

Tại sao lựa chọn này? Có một loại cách trực quan nào nên nói: "hey, logic là từ khóa này bắt đầu bằng @?

Thậm chí nếu tôi nghĩ với quan điểm tiền xử lý, không rõ ràng là @ sẽ gọi một loại tiền xử lý cụ thể trước khi biên dịch (ví dụ @final là không thực sự là một loại chỉ thị tiền xử lý).

mục
+2

Bạn không đơn độc. Bản thân Apple không/không biết sự khác biệt giữa chúng. Gần đây họ đã thay đổi '@ final' thành' final', '@ lazy' thành' lazy', v.v. – Ethan

+1

Ok, cảm ơn, tôi thấy rằng trong bản phát hành XCode 6 beta 4 ghi chú: "The' @ final', '@lazy Các thuộc tính ',' @ optional' và '@ required' đã được chuyển đổi thành các biến tố khai báo, được chỉ định mà không có ký hiệu @." Nếu bạn viết câu trả lời của bạn như bình thường, tôi sẽ upvote nó :) –

+2

Và trong bản phát hành beta 5: "Thuộc tính' @ prefix', '@ infix' và' @ postfix' đã được thay đổi thành bộ chỉnh sửa khai báo, vì vậy chúng không còn được viết bằng dấu @ nữa – Ethan

Trả lời

7

@ -prefixed trong Swift không từ khóa, đây là những thuộc tính.

cuốn sách của Apple trên Swift nói rằng

Thuộc tính cung cấp thêm thông tin về tuyên bố hoặc loại. Có hai loại thuộc tính trong Swift, các thuộc tính áp dụng cho các khai báo và các thuộc tính áp dụng cho các kiểu.

Một số thuộc tính (chẳng hạn như @objc(isEnabled)) chấp nhận tham số.

Sự khác biệt chính giữa thuộc tính và từ khóa là từ khóa cho trình biên dịch biết bạn định nghĩa gì (một lớp, phương thức, thuộc tính, biến, v.v.), trong khi thuộc tính cho trình biên dịch biết bạn có ý định gì sử dụng định nghĩa đó. Ví dụ: bạn sẽ sử dụng từ khóa func để thông báo cho trình biên dịch rằng bạn đang xác định hàm và trang trí hàm đó với thuộc tính @infix để thông báo cho trình biên dịch rằng bạn định sử dụng hàm đó làm toán tử kết xuất.

Các vấn đề liên quan