Swift语言有各种各样的(或没有)记录不佳的特性(属性)等待使用。让我们来看看其中的一些功能:@inline此功能为编译器提供内联提示。有效值为__always和never。我不使用它(尤其是__always),除非我认为我必须这样做。到目前为止,与之相关的规则尚不清楚,并且在有限的测试下,它可以正常工作,但这要视情况而定。进一步解释:虽然底层虚拟机(LowLevelVirtualMachine,LLVM)有强制内联的概念,但我们还不知道这个@inline特性是否直接映射到它,也不知道它是否有大小限制,但是这将导致编译器忽略它并跳过内联。理论上应该是这样,但我不能保证一定是这样。请注意(当优化设置关闭时)在调试模式下构建将忽略@inline。@transparent我最初没有列出此功能。此功能会导致编译器在管道的较早位置内联函数。它用于“非常原始的函数,如+(Int,Int)”和“不应该用于独立函数”。即使在没有优化设置的调试模式下,@transparent特征函数也是内联的,所以调用像“1+1”这样的函数也不是特别慢。此功能也与@inline(__always)非常相似。@availability特性可用于标记某些功能仅在某些平台或版本上可用。第一个参数是平台,你可以用星号(*)来代表所有可用的,也可以是iOS或者OSX。因为如果你需要针对不同的平台,你需要指定多个@availability属性。如果需要表明该功能在给定平台上完全不可用,可以将第二个参数设置为不可用。此外,还可以使用introduced、deprecated和obsoleted来指定一个或多个版本的组合:obsoleted表示该项已被删除,deprecated只是表示如果使用会给出警告。***可以设置message的值,如果使用item,编译器会输出。以下是一些示例:@availability(*,unavailable)funcfoo(){}@availability(iOS,unavailable,message="youcan'tcallthis")funcfoo2(){}@availability(OSX,introduced=10.4,deprecated=10.6,obsoleted=10.10)@availability(iOS,introduced=5.0,deprecated=7.0)funcfoo3(){}@noreturn正如这个特性所描述的那样:编译器可以假定这个函数是一个永远循环的起点,比如whiletrue{},或者假设函数中止或退出进程。CommenterMarcoMasser指出,如果调用另一个标有@noreturn的函数,编译器将忽略当前函数中缺失的返回值(missingreturnvalues),因为编译器理解程序的控制流。@asmname该属性给出函数、方法或属性实现的符号名称。如果你已经知道对应的函数参数和它们的类型,你可以直接调用Swift内部的标准库函数,甚至不需要头文件,也可以轻松调用C语言写的函数:@asmname("function")funcf()@unsafe_no_objc_tagged_pointer上面的内容仍然是个谜,但我猜它告诉Swift在与Objective-C通信时不要使用标记指针。@semantics那又是一个谜。参数看起来像字符串数组,如array.mutate_unknown或array.init。大概这是为了告诉编译器(或静态分析器)函数是如何工作的。结论谁需要乏味的旧@objc和@autoclosure?忘了它!文章来源:RussBishop作者简介:RussBishop是一位全能程序员,他使用C#、Objective-C和Swift进行编程,并开发了独特的应用程序StormSimFree,博客:http://www.russbishop。网/。译者简介:白云鹏,移动应用开发者,个人博客:http://baiyunpeng.com。
