iOS学习笔记(持续更新)

1.willset和didset的用法:

2.关于alpha:

改变父视图alpha的值,子视图alpha值虽然不会改变,但视图绘制效果是由该视图及其父视图alpha值的乘积决定。

如果只想设定视图背景颜色的alpha值而不影响其他视图的显示效果,可以使用colorWithRed: green: blue: alpha: 方法定义一个有着特定alpha值的颜色来作为视图的背景颜色。

alpha为零时,视图将完全不可见,且不能响应触摸事件。

3.rgb的原理:加色混合原理,即通过不同比例的红、绿和蓝三种颜色的光线叠加来产生所有其他颜色。

4.关于模糊效果UIVisualEffectView原理:

高斯模糊:将正态分布用于图像处理。本质上,它是一种数据平滑技术(data smoothing),适用于多个场合,图像处理恰好提供了一个直观的应用实例。

在一定取值范围内,中间图像取范围内的平均值,模糊可以理解成每一个像素都取周边像素的平均值。

如果原图是彩色图,就需要对rgb采用高斯模糊。

swift 中UIVisualEffectView的详细使用:

https://github.com/pro648/tips/blob/master/sources/%E9%AB%98%E6%96%AF%E6%A8%A1%E7%B3%8A%E5%8E%9F%E7%90%86%E3%80%81%E4%BB%A5%E5%8F%8A%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8UIVisualEffectView%E5%AE%9E%E7%8E%B0%E6%A8%A1%E7%B3%8A%E6%95%88%E6%9E%9C.md

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]
    }
    
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值