阅读更多

0顶
0踩

移动开发

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

2015-06-08 15:08 by 副主编 mengyidan1988 评论(0) 有4345人浏览
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为库和工具提供了一种描述可加载常数的标准方法。 改进了...

  • go 生成基于 graphql 服务器库.zip

    格奇尔根 首页 > 文件 > gqlgen是什么?gqlgen是一个 Go 库,用于轻松构建 GraphQL 服务器。gqlgen 基于 Schema 优先方法— 您可以使用 GraphQL Schema 定义语言来定义您的 API 。gqlgen 优先考虑类型安全— 您永远不应该看到map[string]interface{}这里。gqlgen 启用 Codegen — 我们生成无聊的部分,以便您可以专注于快速构建您的应用程序。还不太确定如何使用gqlgen?将gqlgen与其他 Go graphql实现进行比较快速启动初始化一个新的 go 模块mkdir examplecd examplego mod init example添加github.com/99designs/gqlgen到项目的 tools.goprintf '//go:build tools\npackage tools\nimport (_ "github.com/99designs/gqlgen"\n _ "github.com/99designs/gqlgen

  • 基于JAVA+SpringBoot+Vue+MySQL的社区物资交易互助平台 源码+数据库+论文(高分毕业设计).zip

    项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:maven 数据库工具:navicat

  • 法研杯2021类案检索赛道三等奖方案源码+项目说明+数据.zip

    法研杯2021类案检索赛道三等奖方案源码+项目说明+数据.zip是一个专为计算机相关专业(如计科、信息安全、数据科学与大数据技术等)学生设计的宝贵学习资源。该压缩包包含了完整的项目源码、详细的项目说明文档以及用于训练和测试的数据集,旨在帮助参赛者深入理解并掌握类案检索的相关技术和方法。该项目通过实际案例,展示了如何运用自然语言处理和机器学习技术对法律案件进行智能检索和匹配。项目内容涵盖了从数据预处理、特征提取到模型训练和评估的全过程,为学习和研究类案检索技术提供了全面的参考。本项目不仅适合作为课程设计、期末大作业或毕设项目的参考,也是企业员工提升技能、进行实践操作的优质学习资料。通过实际操作和学习该项目,用户可以加深对类案检索技术的理解,并在实践中不断提升自己的技能水平。请注意,由于该资源包含完整的项目源码和数据集,下载和使用时请确保遵守相关法律法规和道德规范,尊重知识产权和隐私权。同时,建议用户在使用前仔细阅读项目说明文档,了解项目的整体架构和使用方法,以便更好地利用该资源进行学习和研究。

  • 基于Cesium实现的对倾斜摄影模型的单体化分层方案源码.zip

    本资源提供了基于Cesium实现的倾斜摄影模型单体化分层方案的完整源码,旨在帮助开发者深入理解并实践三维地理空间数据的处理与展示。通过Cesium平台,用户能够将倾斜摄影获取的高精度三维模型进行单体化和分层处理,实现对模型中每个独立元素的精细管理和交互操作。该资源适合具备一定计算机编程基础的学习者,特别是对Cesium感兴趣的学生、研究人员及GIS行业从业者。通过下载并学习这些源码,用户可以掌握倾斜摄影模型在Cesium中的加载、单体化以及分层显示等关键技术,进而提升自己在三维地理信息系统开发领域的技能水平。

Global site tag (gtag.js) - Google Analytics