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
网友评论