1.Swift中的特性:

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

@attribute(args)

avaiable:

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

@available(iOS 10.0, macOS 10.10, *)

discardableResult:

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

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

objc:

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

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

/// 这里使用了@objc特性来修饰MyProt协议
@objc
protocol MyProt {
 
/// 这里method方法必须实现
func method()
 
/// 这里的foo方法不是必须实现,
/// 而是可选实现
@objc
optional 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 DEBUG
 
print(str)
 
#endif
}
 
debug_log(str: "Hello, world!!")

3.检查API的可用性:

if #available(iOS , *) {

}

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

Swift4.0复习特性、编译标志和检查API的可用性的更多相关文章

  1. 返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .net 4.5 带来的更方便的异步操作

    原文:返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, ...

  2. 在Swift中检查API的可用性

    http://www.cocoachina.com/swift/20150901/13283.html 本文由CocoaChina译者ALEX吴浩文翻译自Use Your Loaf博客 原文:Chec ...

  3. Swift4.0复习类型定义、类型投射等操作

    1.类型定义: /// 这里将MyInt定义为Int32类型 typealias MyInt = Int32   /// 这里将MyArrayInt定义为[MyInt]数组类型 typealias M ...

  4. Swift4.0复习类

    1.类的属性: 2.类的方法: 3.类作为引用类型: “Swift新增了一对操作符 === 与 !== 用于判定同一个类的两个对象引用是否指向同一对象实例.” 摘录来自: “大话Swift 4.0”. ...

  5. Swift4.0复习协议

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

  6. Swift4.0复习闭包

    1.闭包的定义和调用: _ = { (param1: Int, param2: Float, param3: Void) -> return_type in // 闭包执行代码 /* ... * ...

  7. Swift4.0复习访问控制与作用域

    1.访问等级: open: 可以继承,可以重写. public: “public 访问等级能用于修饰所有文件作用域的函数.对象.协议.枚举.结构体.类以及各种类型中的属性与方法.用 public 所修 ...

  8. Swift4.0复习错误处理

    1.Swift中错误的表示: “在Swift中如果我们要定义一个表示错误的类型非常简单,只需遵循 Error 协议即可.我们通常用枚举或结构体类型来表示错误类型,当然枚举可能用得更多些,因为它能更直观 ...

  9. Swift4.0复习扩展

    1.扩展计算式属性: 2.对方法进行扩展: /// 定义枚举类型Light, /// 它指定了基本类型String enum Light: String { case red = "red& ...

随机推荐

  1. ps -ef、ps aux(查看进程占用内存大小)

    Linux下ps -ef和ps aux的区别及格式详解 Linux下显示系统进程的命令ps,最常用的有ps -ef 和ps aux.这两个到底有什么区别呢?两者没太大差别,讨论这个问题,要追溯到Uni ...

  2. mount命令设备的挂载和卸载

    不能挂载到根目录:其他目录都可以 1.光盘设备挂载到mnt mount -t iso99660 /dev/cdrom /mnt 2.光盘镜像文件.so文件挂载到mnt mount -o loop -t ...

  3. AtCoder Grand Contest 006 题解

    传送门 \(A\) 咕咕 const int N=105; char s[N],t[N];int n; inline bool eq(R int k){fp(i,1,k)if(s[n-k+i]!=t[ ...

  4. 《挑战30天C++入门极限》在c/c++中利用数组名作为函数参数传递排序和用指针进行排序的例子。

        在c/c++中利用数组名作为函数参数传递排序和用指针进行排序的例子. 以下两个例子要非常注意,函数传递的不是数组中数组元素的真实值而是数组在内存中的实际地址. #include <std ...

  5. [loj 6496]「雅礼集训 2018 Day1」仙人掌

    传送门 Description 给出一张 \(n\)个点 \(m\)条边的无向连通图,其中每条边至多属于一个简单环,保证没有自环,可能有重边.你需要为其中每条边定向,其中第 \(i\)个点的出度不能超 ...

  6. [WEB安全]PHP伪协议总结

    0x01 简介 首先来看一下有哪些文件包含函数: include.require.include_once.require_once.highlight_file show_source .readf ...

  7. 怎么把分化成元,并且保留两位小数,用vue来做

    <el-table-column prop="amount" label="申请提现金额" width="120" align=&qu ...

  8. Dockers安装nginx

    方法一.通过 Dockerfile构建 创建Dockerfile 首先,创建目录nginx,用于存放后面的相关东西. runoob@runoob:~$ mkdir -p ~/nginx/www ~/n ...

  9. 深入理解JVM虚拟机13:再谈四种引用及GC实践

    Java中的四种引用类型 一.背景 Java的内存回收不需要程序员负责,JVM会在必要时启动Java GC完成垃圾回收.Java以便我们控制对象的生存周期,提供给了我们四种引用方式,引用强度从强到弱分 ...

  10. 【阿里云IoT+YF3300】9.快速开发modbus设备驱动

    Modbus是一种串行通信协议,是莫迪康公司为PLC(编程逻辑控制器)通信而设计的协议.Modbus目前已经成为工业领域通信协议的业界标准,大部分的仪器仪表都支持该通信协议.很早以前就开发过基于Mod ...