1.Swift中的特性:

@引出,后面紧跟特性名,圆括号带参数即可。

@attribute(args)

avaiable:

指明对象,函数,类型的可用性。

@available(iOS 10.0, macOS 10.10, *)

discardableResult:

用于修饰带有返回值的函数或方法,以指明当前函数或方法的返回值可被缺省。

@discardableResult
func foo(a: Int) -> Int {return a + 1
}func foo(_: Void) -> Int {return 10
}// 我们这里对foo(_:)函数进行调用,
// 此时必须使用通配符来接受foo(_:)的返回值,
// 否则会引发编译警告:
// “foo()的返回值未被使用”
_ = foo()// 这里对foo(a:)的调用不需要用通配符来接受,
// 因为它已经用 @discardableResult 特性进行了修饰,
// 表明其返回值可直接被丢弃
foo(a: 10)

objc:

“在Swift 3.1版本之后,所有需要作为一个selector的实例方法都需要用 @objc 特性进行修饰。如果我们想像Objective-C那样定义一个协议,使得它里面的属性与方法不需要都可实现,那么我们可以用 @objc 特性来修饰该协议。”

摘录来自: “大话Swift 4.0”。 iBooks.

/// 这里使用了@objc特性来修饰MyProt协议
@objc
protocol MyProt {/// 这里method方法必须实现
    func method()/// 这里的foo方法不是必须实现,/// 而是可选实现
    @objcoptional func foo()
}

autoclosure:

“可以让一个表达式自动封装为一个不带参数的闭包”

摘录来自: “大话Swift 4.0”。 iBooks.

convention:

“此特性用于修饰一个函数对象的类型,以指定其调用约定。”

摘录来自: “大话Swift 4.0”。 iBooks.

escaping:

“该特性用于修饰一个函数或方法的形参类型,指明该形参将会在稍后执行,因而要被存放一下。这意味着该形参的生命周期将延伸到此函数或方法调用结束之后也不会消失。”

摘录来自: “大话Swift 4.0”。 iBooks.

inline:

“inline特性暗示该函数或方法可以被內联或不被內联。它有一个参数用于指明所修饰的函数或方法是否可被內联:__always 表示总是被內联;never 表示该函数无论什么时候都不应该被內联。”

摘录来自: “大话Swift 4.0”。 iBooks.

/// 定义一个从不内联的函数noinlineFunc
@inline(never)
func noinlineFunc() {print("Never inlined!")
}/// 定义一个总是被内联的函数alwaysinlineFunc
@inline(__always)
func alwaysinlineFunc() {print("always inlined!")
}

_silgen_name:

“_silgen_name特性可用于指明当前所引用的函数是一个遵循C语言标准ABI的函数。”

摘录来自: “大话Swift 4.0”。 iBooks.

2.编译标志:

@inline(__always)
func debug_log(str: String) {#if DEBUGprint(str)#endif
}debug_log(str: "Hello, world!!")

3.检查API的可用性:

if #available(iOS 11, *) {}

到这里Swift4.0基础又学习复习完了一遍,每次学习都有一些不一样的收获,希望自己Swift语言越来越熟练~~~加油?

转载于:https://www.cnblogs.com/pengsi/p/8520910.html

Swift4.0复习特性、编译标志和检查API的可用性相关推荐

  1. Swift4.0复习协议

    1.协议的定义: /// 定义一个协议MyProt protocol MyProt {/// 声明了一个实例方法foo,/// 其类型为:() -> Void func foo()/// 声明了 ...

  2. mysql3819错误,MySQL 8.0新特性 ― 检查性约束的使用简介

    前言 在MySQL 8.0版本中,引入了一个非常有用的新特性 ― 检查性约束,它可以提高对非法或不合理数据写入的控制能力:接下来我们就来详细了解一下. 检查性约束 创建.删除与查看 (1)可以在建表时 ...

  3. 编译原理php,PHP8.0新特性:JIT即时编译

    JIT编译原理 一.查看JIT编译原理图 二.Zend Opcache作用 1.检查opcodes是否缓存 2.zend compiler编译器进行编译生成opcodes 3.optimizer优化器 ...

  4. MySQL 8.0 新特性之检查约束(CHECK)

    文章目录 MySQL 8.0.15 之前 MySQL 8.0.16 之后 列级检查约束 表级检查约束 强制选项 检查约束限制 总结 大家好,我是只谈技术不剪发的 Tony 老师.这次我们来介绍一个 M ...

  5. swift4.0语法杂记(精简版)

    小视频 001--swift简史小视频 002--Playground体验 003--常量&变量 一.swift简史 1.介绍 swift是苹果公司于2014年推出用于撰写OS和iOS应用程序 ...

  6. swift4.0语法杂记

    原文地址:https://www.jianshu.com/p/06b9ddf748f7 (如有侵权,请联系我删除.) 小视频 001--swift简史小视频 002--Playground体验 003 ...

  7. Android4.0新特性 中文翻译

    转自http://www.eoeandroid.com/thread-103300-1-1.html android4.0 SDK发布有一段时间了,在eoe上找到了翻译过的新特性说明,特转载 Andr ...

  8. Android 4.0新特性(中文)

    Android 4.0新特性(中文) 转自http://www.eoeandroid.com/thread-103300-1-1.html android4.0 SDK发布有一段时间了,在eoe上找到 ...

  9. C#6.0,C#7.0新特性

    C#6.0,C#7.0新特性 C#6.0新特性 Auto-Property enhancements(自动属性增强) Read-only auto-properties (真正的只读属性) Auto- ...

最新文章

  1. 利用Advanced Installer将asp.netMVC连同IIS服务和mysql数据库一块打包成exe安装包
  2. iou iof matrix_iof
  3. pintos实验三文档_实验室如何实现智能、数字化管理?
  4. SpringBoot集成JPA根据实体类自动生成表
  5. ASP.NET MVC 1.0 + spring.net 1.2.0.20288 + NHibernate 2.0.1.4000整合笔记(三)——NHibernate配置...
  6. poj 2828 线段树
  7. leetcode之逆波兰表达式
  8. 利用Nginx+Mono+Fastcgi代替IIS对Asp.Net进行反向代理
  9. 数值计算求解静态热传导方程
  10. Topic 19. 临床预测模型之输出每个患者列线图得分 (nomogramFormula)
  11. 怎么彻底关闭UAC(user account control)?
  12. XIlinx MIG 控制DDR3 SO-DIMM内存条(一):内存条SO-DIMM规范与内存颗粒时序参数
  13. 计算机辅助翻译和机器翻译的区别,计算机辅助翻译和机器翻译有何区别?
  14. 常用的背景色、文字颜色
  15. 如何化解频临离婚边缘的婚姻危机
  16. 奥塔哥大学计算机科学怎样,奥塔哥大学自然科学学院挂科率高吗?
  17. 解决python ping测试
  18. 爱航拍,可以在这里晒出无人机和航拍故事
  19. 什么是RFID技术?
  20. 2022考研日志(已完结)

热门文章

  1. springboot启动过程_spring5/springboot2源码学习 -- spring boot 应用的启动过程
  2. elasticsearch 问题
  3. 转:Fiddler抓包工具总结
  4. Round Numbers
  5. DIY Ruby CPU 分析 Part II
  6. 回溯法 -数据结构与算法
  7. 好久没发胡说八道的贴了,今天发一贴
  8. 西北大学计算机科学排名,西北大学计算机科学与信息系统Computer Science and Information Systems世界排名2020年最新排名第151-200位(QS世界排名)...
  9. spring声明式事务管理方式( 基于tx和aop名字空间的xml配置+@Transactional注解)
  10. Cannot resolve symbol 'R',Failed to resolve: constraint-layout