阅读更多

0顶
0踩

移动开发

原创新闻 Swift语言那些鲜为人知的特性

2015-06-08 15:08 by 副主编 mengyidan1988 评论(0) 有4360人浏览
Swift语言有各种各样缺乏(或没有)文档记录的特性(attribute)放在那里等着被使用。让我们一起看看其中的一些特性:

@inline

这个特性为编译器提供了内联提示。有效的取值是__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的值,如果该项被使用了就由编译器输出。下面是一些例子:
@availability(*, unavailable)
func foo() {}

@availability(iOS, unavailable, message="you can't call this")
func foo2() {}

@availability(OSX, introduced=10.4, deprecated=10.6, obsoleted=10.10)
@availability(iOS, introduced=5.0, deprecated=7.0)
func foo3() {}

@noreturn
正如该特性所描述的那样:编译器可以假定这个函数是一个永远循环运行的起点,例如while true { },或者假定是函数abort或者exit进程的情况。

评论者Marco Masser指出,如果调用另一个被标志为@noreturn的函数,那么编译器会忽略掉当前函数中缺失的返回值(missing return values),因为编译器理解程序的控制流。

@asmname

该属性给出了函数、方法或属性实现的符号名称。如果你已经知道对应的函数参数及其类型,那么就可以直接调用Swift的内部标准库函数,甚至不用头文件,也可以方便地调用C语言编写的函数:
@asmname("function") func f()

@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,博客:http://www.russbishop.net/

译者简介:白云鹏,移动应用开发者,个人博客:http://baiyunpeng.com
0
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 2023编程语言趋势

    汇编稳步上升 近年来,TIOBE指数上一个鲜为人知的编程语言趋势是——汇编语言持续缓慢但稳步增长。 汇编语言在2016年首次进入最受欢迎语言的前十名。目前排名第九,比去年下降一名,但这仍然领先于PHP、Go和Swift等...

  • swift2.1新特性(转载)

    如果你觉得苹果的Swift语言没有赶上趟,那就要重新审视这一观点了!Xcode 7.1 Beta 2版本已经支持Swift 2.1了。我没有必要在此事无巨细一一列举,你随时可以自行查看其发布说明的。 互操作性和数据类型 从...

  • 不同角度看问题 - 从 Codable 到 Swift 元编程

     DictionaryValue { var value: Any { return mapValues { $0.value } } } 在这里我们遇到一个非常“经典”的 Swift 的语言限制,那就是在 Swift 4.1 之前还不能写出上面这样的带有条件语句 (也就是 ...

  • Swift中的集合类数据结构

    除了在 Swift 和Objective-C 中旧的 Foundation 框架中的数据结构,现在又有了新的仅支持 Swift 版本的数据结构与语言紧密结合在一起。 Arrays 数组就是以一定顺序排列的一组数据,你可以通过索引来获取每一...

  • 从 Codable 到 Swift 元编程

    在这里我们遇到一个非常“经典”的 Swift 的语言限制,那就是在 Swift 4.1 之前还不能写出上面这样的带有条件语句 (也就是 where 从句,Element 和 Value 满足 DictionaryValue) 的 extension。这个限制在 Swift 4.1...

  • Swift 开源项目精选 - 应用架构角度

    基于Swift 开源项目精选导图,以应用架构角度出发继续甄选并“精分”。筛选、介定方法更偏重于构建应用时,项目在分类中起到的作用权重,可持续性权重,并部分算上开发者影响力。尝试持续地完善一份不那么杂乱无章...

  • 深入理解 Dart 空安全

    时至今日,Kotlin、Swift、Rust 及众多语言都拥有他们自己的解决方案,空安全已经成为屡见不鲜的话题。让我们来看下面这个例子: // Without null safety: bool isEmpty(String string) => string.length ==...

  • Node.js到底是什么?为什么要使用它?

    它是目前使用中发展最快的语言,在十大最受欢迎的开发人员技能中排名第一。 Node.js的使用主要用于完整堆栈,前端和后端。 什么是Node.js? (What is Node.js?) As we’ve previously touched on this in Best Node...

  • 程序员必备的21款工具与编程灵感

    项目地址: https://github.com/macrozheng/mall 5.wtfpython 这是一个有趣的项目,作者收集并整理了 Python 中反人类直觉的例子,以及鲜为人知的功能特性,并尝试讨论这些现象背后真正的原理。或许能唤起你当年踩...

  • Android Weekly #35 知识工作者就是管理者——虽未管人,但在管事

    计算机编程语言自从诞生以来,不断发展,很多已经逐渐消失在历史的长河中,当前(2022 年)最流行的几门语言包括(排名不分先后):Python、Java、Javascript、C++、Kotlin、R、PHP、Go、C、Swift、C#等。使用计算机编程...

  • iOS开发·备战2022金三银四-runtime原理与实践: 消息转发详解篇

    动态特性:方法解析和消息转发(Method Resolution,Fast Rorwarding,Normal Forwarding),第三节将介绍方法交换几种的实战场景:特定奔溃预防处理(调用未实现方法),苹果系统迭代造成API不兼容的奔溃处理,第...

  • 你与高薪仅差一本Kotlin

    谷歌在17年举行的I/O开发者大会上宣布,将Kotlin语言作为安卓开发的一级编程语言。于此同时,Kotlin语言一出就上了各大IT门户网站的头条,百度搜索达到300万条,招聘公司已经开始高薪找人,今天小编带你了解一下...

  • ▩Dart-深入理解空安全

    目录一、概述二、类型系统中的可空性三、非空和可空类型四、使用可空类型五、顶层及底层六、确保正确性七、流程分析八、可达性分析九、为不可达的代码准备...时至今日,Kotlin、Swift、Rust 及众多语言都拥有他们自己的

  • 【译】VisionMobile:开发者经济报告2015 Q3(二):语音选择是区域、财务和物质

    很多程序员可以自如地使用多种语言,在某些情况下,差异很小可以技能转换,但正如我们在上一份报告(开发者国度状况2015年Q1)所讲,Apple的Swift语言兴起不是因为Objective C开发者的成本,Apple已经吸引了新一波...

  • java jdk12_JDK 12:Java 12中的新功能

    因此,处理可加载常量的程序如果可以操纵类和方法以及鲜为人知的工件(例如方法句柄和名义上象征形式的动态计算的常量),则可以简化。 因此,JVM常数API为库和工具提供了一种描述可加载常数的标准方法。 改进了...

  • 基于万能逼近原理的自适应模糊控制算法在多自由度AUV运动控制中的应用与抗干扰补偿Simulink仿真研究,自适应模糊控制算法的万能逼近原理与多自由度AUV运动控制的抗干扰补偿技术-基于Simulin

    基于万能逼近原理的自适应模糊控制算法在多自由度AUV运动控制中的应用与抗干扰补偿Simulink仿真研究,自适应模糊控制算法的万能逼近原理与多自由度AUV运动控制的抗干扰补偿技术——基于Simulink的仿真研究,万能逼近原理自适应模糊控制算法的多自由度AUV运动控制抗干扰补偿simulink仿真 ,核心关键词:万能逼近原理; 自适应模糊控制算法; 多自由度AUV运动控制; 抗干扰补偿; Simulink仿真。,基于万能逼近的模糊控制算法多自由度AUV抗干扰补偿Simulink仿真

  • 如何修复加载 DeepSeek 时出现的 500 内部服务器错误.pdf

    deepseek最新资讯、配置方法、使用技巧,持续更新中

  • DeepSeek-V3解析1:多头潜在注意力.pdf

    deepseek最新资讯、配置方法、使用技巧,持续更新中

  • 结合扩展卡尔曼滤波与滑模观测器的策略:优化电角度估计,反电势波形逼近完美正弦波,结合扩展卡尔曼滤波与滑模观测器的反电势波形优化:正弦波形展现近乎完美精度,电角度估算与实际应用差异微小,扩展卡尔曼滤波与

    结合扩展卡尔曼滤波与滑模观测器的策略:优化电角度估计,反电势波形逼近完美正弦波,结合扩展卡尔曼滤波与滑模观测器的反电势波形优化:正弦波形展现近乎完美精度,电角度估算与实际应用差异微小,扩展卡尔曼滤波与滑模观测器的结合,反电势波形近乎完美的正弦波形,观测器估算转子电角度与实际电角度相差0.3弧度左右,转速跟随效果较好。 ,核心关键词:扩展卡尔曼滤波; 滑模观测器; 反电势波形; 转子电角度估算; 转速跟随效果。,卡尔曼滑模观测器:优化正弦波转子角度与转速估算

Global site tag (gtag.js) - Google Analytics