Swifter4

2019/10/10 posted in  iOS
  1. Curring(柯里化)

    把接受多个参数的方法变换成接受第一个参数的方法,并且返回接受余下的参数并返回结果的新方法。

    在Swift2中可以将方法进行Curring 但是在Swift4不再支持方法的柯里化

    屏幕快照 2019-02-12 下午3.48.34

  2. @autoclosure

    func logIfTrue(predicate: () -> Bool) {
            if predicate() {
    print("true")
    }
    }
    调用方式1
    logIfTrue(predicate: {2 > 1})
    调用方式2
    logIfTrue{2 > 1}

    原来的闭包的书写方式如上面所写,但是看起来不是很容易理解,这时就出现了自动闭包。

    swift4 中的自动闭包书写和 swift2中不同 区别点在@autoclosure的位置,swift2中是在参数之前,在 swift4中是在参数之后。

    func logIfTrue(predicate:@autoclosure () -> Bool) {
            if predicate() {
    print("true")
    }
    }
    logIfTrue(predicate: 2 > 1)

    另外需要注意@autoclosure 并不支持带有输入参数的写法,只有形如()-> T 的参数才能使用这个特性进行简化。

  3. Designated、Convenience 和Required

    只有在子类重写了父类的 designated 方法的时候才可以直接调用父类的 convenience 方法

    如果添加 required 关键字修饰初始化方法,则在子类中必须对该 required 方法进行实现。这样做的好处就是可以保证依赖于某个 designated 方法的 convenience 一直可以被使用。

  4. Swift 中的Array,Dictionary和Set在集合中只能存储同一个类型的元素,但是NSArray可以存储多种不同类型的数据,如果想要Array 存储不同类型的数据,可以使用Any AnyObject

    let store:[Any] = [1,"1"]