swift问题小结

1.swift是面向对象还是函数式编程语言

swift是函数式也是面向对象的语言。
swift是面向对象语言,因为他支持类的封装、多态、继承。
swift是函数式语言,因为他支持map、reduce、filter、flatmap等去除中间状态、数学函数式的方法,更加强调运算结果而非过程。

2. swift中 class和struct区别

swift中 class是引用类型,struct是值类型。class在使用时是引用一个地址,使用一个指向,struct是当赋值和传递时候会进行值的复制。
另外class和struct的区别和联系

  • class可以继承,struct不可以

  • class类型转换可以在运行时检查和解释一个实例的类型

  • class 可以deinit一个对象

  • 类可以被多次引用

  • struct 先比来说结构小,适用于复制操作,相比于class对象引用 更加安全

  • struct不用担心内存泄漏或者多线程冲突。

  • struct和class 都可以使用protocol

3. 访问权限

Open, Public,Inernal,File-private,Private权限依次递减。

4. 关键词 strong,weak,unowned

strong,weak 和oc中作用一样
unowned和weak使用差别如下:

  • 当访问对象访问时候可能会被释放的时候使用weak
  • 当访问对象确定不可能被释放时候用unowned
    实际项目中多半用weak,相对安全。
4. 属性观察
  var title:String{
    willSet {
        //属性将要修改
    }
    willSet {
        //属性已经修改
    }
  }

其实就是oc里面的kvo 只不过把kvo里面的方法外化了

5. mutating

主要作用是定义 struct或者enum里面是否可以修改自己的成员变量,主要是protocol定义的时候

    protocol person{
        var name: String{get set}
    }
    struct devid: person{
          var name:String
          //下面这一句就应该加上mutating 表明此方法会修改成员变量
          mutating func changeName(name:String){
              self.name = name
          }
     }
6. swift实现|| 操作

主要是@autoclosure 他可以让left判断失效时候 走 else的时候再判断right是否有效 主要是考虑 如果表达式过于复杂 当left判断生效之后可以省略右边表达式的计算,节省资源。

  func || (left: Bool, right: @autoclosure()->Bool) ->Bool{
    if left{
      return true
    }else{
      return right()
    }
  }
7. 输入任意一个数,输出为输入整数+2

利用swift carraying特性

  func add(_ num:Int) -> (Int) ->Int{
    return {
        val in
        return num + val
      }
  }

  let addThree = add(3)
  print(addThree(5))

输出结果:8

你可能感兴趣的:(swift问题小结)