一、构造方法
在Swift中,主要有三种构造方法:系统构造方法、普通构造方法与便利构造方法。构造方法一般都是以 init 开头的方法。
系统构造方法一般是在子类中重写系统的构造方法。
普通构造方法就是一般在子类中实现的方法,在系统构造方法中添加一些自定义的参数。
其中以上两种构造方法,合称设计构造方法。
便利构造方法一般是在扩展中实现的构造方法。
系统构造方法
仅仅是对当前对象做一些初始化操作。
// 重写视图的构造方法
override init(frame: CGRect) {
super.init(frame: frame)
// 添加一个按钮
addSubview(btn)
// 默认背景色
backgroundColor = UIColor.red
}
普通构造方法
在对当前对象做一些初始化的同时,需要带入一些必要的参数。
// 自定义的一个普通构造方法
init(title:String, color:UIColor = UIColor.yellow) {
// 系统的/自定义的构造方法
self.init()
// 设置title
setTitle(title as String, for: .normal)
setTitleColor(UIColor.black, for: .normal)
// 背景色
backgroundColor = color
}
这里的特别之处是第二个参数, 这叫可选类型的参数,可以不传。默认值是等号(=)右边的值。
便利构造方法
一般用于在扩展中定义构造方法。
extension UIButton {
// 便利构造方法 必须添加关键字'convenience' 可选参数'color'
convenience init(title:String, color:UIColor = UIColor.yellow) {
// 设计构造方法
self.init()
// 其它操作
setTitle(title, for: .normal)
setTitleColor(UIColor.black, for: .normal)
backgroundColor = color
}
convenience init(frame: CGRect, title:NSString) {
self.init(frame: frame)
setTitle(title as String, for: .normal)
}
}
对,你没有看错。与普通构造方法的区别在于在函数前面多了一个关键字 ** convenience**。
二、如何弱引用强指针
一般是在闭包中:
{ [weak self] in
// TODO
}()
weak 只能修饰可选类型. 可选链的方式调用方法,可选链返回一定是一个可选类型.
三、delegate的简单使用
代理(delegate)本身就是一个协议.
delegate的定义
import UIKit
// 加上class的意思是这个协议只能被class遵守, 以后不能将delegate属性定义成为可选类型.
protocol HGViewDelegate: class {
// 外部参数 selecedIndex 内部参数 index
func hgView(hgView: HGView, selecedIndex index: Int) ;
}
class HGView: UIView {
// 定义一个代理属性
weak var delegate: HGViewDelegate?
private func delegateTest() {
// delegate 的调用
delegate?.hgView(hgView: self, selecedIndex: 0)
}
}
delegate 的使用
import UIKit
class HGController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
// 创建一个视图
let hgView = HGView()
// hgView遵守协议
hgView.delegate = self
// 添加该视图到控制器视图
view.addSubview(hgView)
}
}
// MARK: 协议 HGViewDelegate 的实现
extension HGController: HGViewDelegate {
func hgView(hgView: HGView, selecedIndex index: Int) {
print("你点击了第 \(index) 个")
}
}
心往一处想,劲往一处使。
网友评论