关于swift的一些属性总结

 guard let x = x where x > 0 else {
        // 变量不符合条件判断时,执行下面代码
        return
    }
使用guard语句将上述的3个问题一并解决:
  1. 是对你所期望的条件做检查,而非不符合你期望的。又是和assert很相似。如果条件不符合,guard的else语句就运行,从而退出这个函数。
  2. 如果通过了条件判断,可选类型的变量在guard语句被调用的范围内会被自动的拆包 - 这个例子中该范围是fooGuard函数内部。这是一个很重要,却有点奇怪的特性,但让guard语句十分实用。
  3. 对你所不期望的情况早做检查,使得你写的函数更易读,更易维护。(1)

 反向遍历就是直接在enumerated()函数后调用reversed()函数。 swift (2)

extension 类似oc的扩展,但是指这个类的扩展,可以让代码逻辑更好控制,也为日后重构代码打下了良好的基础(3)

访问权限则依次为:open,public,internal,fileprivate,private。fileprivate这个元素的访问权限为文件内私有(4)

 private lazy var xxx:xxx{ return:} 相当于oc中的懒加载(5)

if #available(iOS 11.0, *) {

            return view.safeAreaInsets

        } else {

            return .zero

        }

swift和oc中都一样,判断系统是否是iOS11 (6)

willSet是在设置新值之前调用,willSet观察器会将新的值作为参数传入,默认参数名为newValue。didSet是设置新值后立即调用,观察期会将旧的值作为参数传入,默认参数为oldValue。
需要注意的是在属性初始化的时候不会调用willSet 和 didSet方法。如果在didSet 为属性赋值,这个值会替换原来观察器之前设置的值。(7)

Swift 自动对行内闭包提供简写实际参数名,你也可以通过 $0 , $1 , $2 等名字来引用闭包的实际参数值。

如果你在闭包表达式中使用这些简写实际参数名,那么你可以在闭包的实际参数列表中忽略对其的定义,并且简写实际参数名的数字和类型将会从期望的函数类型中推断出来。 in  关键字也能被省略,因为闭包表达式完全由它的函数体组成:

1

2

3

4

5

6

7

let numbers = [3,2,4,1,5,7,6];

var sortedNumbers = numbers.sorted(by:{$0 < $1});

print(sortedNumbers);//输出为:[1, 2, 3, 4, 5, 6, 7]

sortedNumbers = numbers.sorted(by:{$1 < $0});

print(sortedNumbers);//输出为:[7, 6, 5, 4, 3, 2, 1]

 可以看出,可以用$0、$1、$2来表示调用闭包中参数,$0指代第一个参数,$1指代第二个参数,$2指代第三个参数,以此类推$n+1指代第n个参数,$后的数字代表参数的位置,一一对应。

猜你喜欢

转载自my.oschina.net/u/2603560/blog/1606518