Swift4.0复习特性、编译标志和检查API的可用性
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方法不是必须实现, /// 而是可选实现 @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 11, *) { }
到这里Swift4.0基础又学习复习完了一遍,每次学习都有一些不一样的收获,希望自己Swift语言越来越熟练~~~加油💪