Swift言语那些不为人知的个性
Swift言语有各种各样不足(或没有)文档记载的个性(attribute)放在那里等着被经常使用。让咱们一同看看其中的一些个性:
这个个性为编译器提供了内联揭示。有效的取值是__always和never。除非我以为必定要用这两个值,否则就不会经常使用它(特意是__always)。到目前为止与其关系的规定还不是很明白,在有限的测试下,它可以反常地上班,但还要视详细状况而定。
进 一步的解释:虽然底层虚构机(Low Level Virtual Machine,LLVM)有强迫内联的概念,但咱们目前还不知道这个@inline个性能否与其间接映射,也不知道能否存在大小方面的限度,但这将会造成编译器疏忽这一 点而跳过内联。通常上说应该是这样的,但我不保障必定是。
留意(当提升设置封锁时)在调试形式下的构建将疏忽@inline。
@transparent
我最后并未将这个个性列进去。该个性会造成编译器在管道(pipeline)中更早地将函数内联。它用于 “像+(Int, Int)这样十分原始的函数”,而“不应该用于独立函数” 。
甚至在没有提升设置的调试形式下@transparent个性函数就会被内联,所以在调用“1+1”这样的函数的时刻并不会特意慢。另外这个个性与@inline(__always)十分相似。
@availability
这个个性可以用来标识某些函数只在某些平台或版本上可用。***个参数是平台,可以用星号(*)代表一切可用,还可以是iOS或OS X。由于假设要求针对不同的平台,就要指定多个@availability属性。
如 果要求示意该函数在某个给定的平台齐全无法用时,可以将第二个参数置为unavailable。此外,还可以用 introduced,deprecated和obsoleted来指定一个或是多个版本的组合:obsoleted象征着该项曾经删 除,deprecated仅仅示意假设经常使用就会给予正告。***你可以设置message的值,假设该项被经常使用了就由编译器输入。上方是一些例子:
正如该个性所形容的那样:编译器可以假设这个函数是一个永远循环运转的终点,例如while true { },或许假设是函数abort或许exit进程的状况。
评论者Marco Masser指出,假设调用另一个被标记为@noreturn的函数,那么编译器会疏忽掉函数中缺失的前往值(missing return values),由于编译器了解程序的控制流。
该属性给出了函数、方法或属性成功的符号称号。假设你曾经知道对应的函数参数及其类型,那么就可以间接调用Swift的外部规范库函数,甚至不用头文件,也可以繁难地调用C言语编写的函数:
@unsafe_no_objc_tagged_pointer
上方这个依然是个谜,但我猜想它是在通知Swift与Objective-C咨询的时刻不要经常使用tagged pointer。
@semantics
这又是另一个谜。参数看起来像是array.mutate_unknown或array.init这样的字符串数组。想必这是要通知编译器(或静态剖析器)函数是如何上班的。
论断
谁还要求有趣老套的@objc和@autoclosure呢?还是算了吧!
文章起源: Russ Bishop
作者简介: Russ Bishop 全能型程序员,经常使用C#、Objective-C和Swift言语编程,开发了奇怪的运行Storm Sim Free,博客:。
译者简介:白云鹏,移动运行开发者,团体博客:。