Swift小知识

title: Swift 小知识
date: 2019-02-27 10:42:55
tags:

  • Swift
    categories:
  • iOS

  1. class 修饰的 func 可以被重写,static 不可以
  2. protocol 中要求实现的方法必须保证访问控制修饰符也要正确,尤其是对于可选实现的方法,如果修饰符不对就会被当做没有实现
  3. 如果调用 ErrorlocalizedDescription 方法跟你重写的内容不一样,那你八成是没有让你的 Error 实现 LocalizedError 协议
  4. 什么是尾递归
    
    //这个不是
    function factorial(n) {
      if (n === 1) return 1;
      return n * factorial(n - 1);
    }
    
    //这个才是
    function factorial(n, total) {
      if (n === 1) return total;
      return factorial(n - 1, n * total);
    }
    

    自己品,细品

  5. @autoclosure 使用场景
    func useBifAisTrue(a: bool, b: Int) { 
        //...
        guard a else {
       	return
        }
        let r = b + 100
        //...
    }
    func getB() -> Int {
        //... 非常耗时的操作
        return x
    }
    
    userBifAisTrue(a: false, b: getB()) 
    //直接调用上边的方法会先执行getB方法,如果a是false的话,b根本用不到,但是它已经执行了,及其浪费资源
    //用自动闭包就可以延迟getB的执行了
    
    func useBifAisTrue(a: bool, @autoclosure b: Int) {
        //...
        guard a else {
            return
        }
        let r = b() + 100
        //...
    }