programming-languages - Swift 中带和不带 @ 的关键字

标签 programming-languages swift keyword

在 Swift 中,有时关键字是普通关键字,而另一些则以 @ 开头。

例如,weakunownedinoutclass 都是普通的。但是@final@lazy@开头。

有时,我们甚至两者都有!例如,prefix@prefixinfix@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/

相关文章:

ios - Swift:禁用或清除 TextField 的撤消

c# - 使用 "is"关键字和 "null"关键字 c# 7.0

java - 如何使用Java正确读取RRD文件?

programming-languages - 可以改变自己语法的语言?

shell - 第一种具有交互式 shell 的编程语言?

ios - 唯一标识符的图像缓存最佳实践

windows - Windows、Mac OS X 和 Linux 是用什么语言编写的?

swift - Label 和 ProgressBar 不会更新 macOS Swift

seo - 页面标题中的网站名称或 sitename.com?

tags - 视频标签不再通过 YouTube API 可用?