1.willset和didset的用法:
2.关于alpha:
改变父视图alpha的值,子视图alpha值虽然不会改变,但视图绘制效果是由该视图及其父视图alpha
值的乘积决定。
如果只想设定视图背景颜色的alpha值而不影响其他视图的显示效果,可以使用colorWithRed: green: blue: alpha:
方法定义一个有着特定alpha值的颜色来作为视图的背景颜色。
当alpha
为零时,视图将完全不可见,且不能响应触摸事件。
3.rgb的原理:加色混合原理,即通过不同比例的红、绿和蓝三种颜色的光线叠加来产生所有其他颜色。
4.关于模糊效果UIVisualEffectView原理:
高斯模糊:将正态分布用于图像处理。本质上,它是一种数据平滑技术(data smoothing),适用于多个场合,图像处理恰好提供了一个直观的应用实例。
在一定取值范围内,中间图像取范围内的平均值,模糊可以理解成每一个像素都取周边像素的平均值。
如果原图是彩色图,就需要对rgb采用高斯模糊。
swift 中UIVisualEffectView的详细使用:
5.map的用法:
可以当作for in循环来使用
map
函数除了用于数组,还可用于其他集合类型,例如字典、Set,但返回结果永远是数组
let values = [2.0, 4.0, 5.0, 7.0]
var squares: [Double] = []
for value in values {
squares.append(value*value)
}
可以写成:
let squares2 = values.map {$0 * $0}
6.swift中class和struct的区别:
(1)class是引用类型,struct是值类型。
引用类型:将一个对象赋值给另一个对象时,系统不会对此对象进行拷贝,而会将指向这个对象的指针赋值给另一个对象,当修改其中一个对象的值时,另一个对象的值会随之改变。
值类型:将一个对象赋值给另一个对象时,会对此对象进行拷贝,复制出一份副本给另一个对象,在修改其中一个对象的值时,不影响另外一个对象。
(2)class可以继承,struct无法继承。
(3)class中的成员变量需要初始化,而struct中的成员变量不需要初始化。
7.defer 所声明的 block 会在当前代码执行退出后被调用.
defer {
DispatchQueue.main.sync {
self.processPoints(thumbTip: thumbTip, indexTip: indexTip)
}
}
8.lazy var name:String = { var str = "mengduan hello" return str }()其实是一个闭包形式的写法,只有用到时才会进行初始化。
要标明返回值,并加lazy修饰:
lazy var name:String = { var str = "mengduan hello" return str }()
或者闭包写法:
lazy var name = { () -> String in var str = "mengduan hello" return str }()
9.泛型。
我们都知道,swift有严格的类型规定,需要定义int,double这些类型才能去使用变量或函数,而泛型能让你能根据自定义的需求,编写出适用于任意类型的、灵活可复用的函数及类型。
如下为非泛型的函数定义:
func swapTwoInts(_ a: inout Int, _ b: inout Int) {
let temporaryA = a
a = b
b = temporaryA
}
上面的函数只能输入两个int
改成泛型函数:
func swapTwoInts<T>(_ a: inout T, _ b: inout T) {
let temporaryA = a
a = b
b = temporaryA
}
可以输入任意两个相同类型的变量
var first = "hello"
var second = "world"
swapTwoInts(&first,&second)
泛型扩展:
struct Stack<T>{
var items = Array<T>()
mutating func push(_ item : T){
items.append(item)
}
mutating func pop() -> T{
return items.removeLast()
}
}
//泛型扩展
extension Stack{
var topItem : T?{
return items.isEmpty ? nil : items[items.count - 1]
}
}