在 Swift 中,有时关键字是普通关键字,而另一些则以 @
开头。
例如,weak
、unowned
、inout
、class
都是普通的。但是@final
,@lazy
以@
开头。
有时,我们甚至两者都有!例如,prefix
和@prefix
,infix
和@infix
。
这不完全是 Objective-C 继承,因为我们在 Objective-C 中有 @class
而不是 class
。我能理解为什么我们在 Swift 中有 class
而不是 @class
,但是因为我们有 @final
或 @lazy
,我会认为它应该是 @weak
而不是 weak
。
为什么这样选择?有没有一种直观的方式应该告诉:“嘿,这个关键字以 @
开头是合乎逻辑的?
即使我从预处理器的角度考虑,@
会在编译前调用一种特定的预处理器并不明显(例如 @final
并不是真正的预处理器)一种预处理器指令)。
最佳答案
@
- Swift 中的前缀项不是关键字,它们是属性。
Apple 关于 Swift 的书说
Attributes provide more information about a declaration or type. There are two kinds of attributes in Swift, those that apply to declarations and those that apply to types.
一些属性(例如@objc(isEnabled)
)接受参数。
属性和关键字之间的主要区别在于,关键字告诉编译器您正在定义什么(类、方法、属性、变量等),而属性告诉编译器您打算在什么上下文中使用那个定义。例如,您可以使用 func
关键字告诉编译器您正在定义一个函数,并使用 @infix
属性修饰该函数以告诉编译器您计划将该函数用作中缀运算符。
关于programming-languages - Swift 中带和不带 @ 的关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24350000/