开发中类和结构体的选择
1、需要存储的内容占用内存较小的时候,优先考虑使用结构体
2、大内存数据优先考虑使用类
3、不需要进行继承使用且结构体满足要求时优先使用结构体
4、简单的数据存储且满足要求时使用结构体。
5、满足要求时,优先使用结构体,可以减少app的启动时间。
6、需要进行值拷贝而不是指针拷贝时优先使用结构体。
Swift的写时拷贝(Copy-on-Write)机制是指在对可变类型进行修改操作之前不会立即创建新的数据副本。而是将原始值与引用计数器关联起来,只有当需要修改该值时才会真正复制并分配内存空间
Swift本身是很建议程序员少用类,多用结构体、枚举。但是使用结构体的时候,写时拷贝如果不清楚的话,很容易写出性能不是很好的代码。如果是对算法要求高的公司写时拷贝机制是必问的。
模式是用于匹配的规则,比如switch的case、捕捉错误的catch、if、guard、while、for语句的条件等。
Swift中的模式有:
_
表示。_?
匹配非nil值。var name="rose"
。let point=(3,2)
switch point{
case let(x,y):
print("The point is at \(x),\(y)")
}
let points = [(0,0),(0,1),(0,2)]
for (x,_) in points {
print(x)
}
let age=2
if case 0...9 = age {
print("在范围之间")
}
let age: [Int?] = [nil,2,3,nil,8]
for case let age? in ages {
print(age)
}
let num: Any = 6
switch num {
case is Int: // 编译器依然认为num是Any类型
print("is Int",num)//case let n as Int:// print("as Int", n + 1)
default:
break
}
let point = (1, 2)
switch point {
case (0, 0):
print("(0, 0) is at the origin.")
case (-2...2, -2...2):
print("(\(point.0), \(point.1)) is near the origin.")
default:
print("The point is at (\(point.0), \(point.1)).")
} // (1, 2) is near the origin.
Swift的一大亮点就是面向协议开发,程序员可以 对协议扩展默认实现。不但能实现其他语言的类似多继承的效果、而且面向协议开发能对代码带来极大的扩展性。
泛型主要用于解决代码的抽象能力 + 代码的复用性
Swift的泛型感觉真的是做到了极致了,Swift标准库里面用到了大量的协议和泛型。
如果想招个有点水平的Swift开发、泛型岂能不问。
泛型除了问 where泛型约束 这些,也可以问下为什么Swift标准库比如 swap map这些函数为什么要用到泛型,只用协议有什么弊端。
@_specialize也可以问下
这几个特性可以让Swift实现很多语法级别的扩展。
现代语言设计有很多必选项。Kotlin和Swift有很多相似之处,各有所长。
但是他们不约而同的设计了类似于Optional这些特性,主要还是因为这些特性都是太多人踩过坑,踩出来的经验。旧时代语言大体定型,不好大改,新时代语言设计之初肯定会考虑这些特性。
什么函子、单子 使劲问、函数是第一公民之类的也都是必问的。
可以问问RxSwift、也可以问问苹果新出的Combine,思想都一样。
比如响应式编程在网络请求,数据解析,UI响应 等等各个方面的表现
1)swift是静态语言,有类型推断,OC是动态语言。
2)swift是一门支持多编程范式的语言,既支持面向对象编程,也支持面向协议编程,同时还支持函数式编程,OC面向对象编程。
3)swift注重值类型,OC注重引用类型。
4)swift支持泛型,OC只支持轻量泛型
5)swift支持静态派发(效率高)、动态派发(函数表派发、消息派发)方式,OC支持动态派发(消息派发)方式。
6)swift的协议不仅可以被类实现,也可以被struct和enum实现
7)swift有元组类型、支持运算符重载
8)swift支持命名空间
9)swift支持默认参数
10)swift比oc代码更加简洁
Swift相对OC有什么优势
1)swift容易阅读,语法和文件结构简易化。
2)swift更易于维护,文件分离后结构更清晰。
3)swift更加安全,它是类型安全的语言:
4)swift代码更少,简洁的语法,可以省去大量冗余代码。
5)swift速度更快,运算性能更高。