Swift5 笔记
2020-04-24 本文已影响0人
路有点颠簸
https://www.jianshu.com/p/204b4c4b3355
moya:https://www.jianshu.com/p/47fd2ed5a74d
、https://www.jianshu.com/p/2ee5258828ff
swift5项目:https://github.com/Light413/dctt
、
https://www.jianshu.com/p/6cd4de45f004
、
https://github.com/lb2281075105/LBXMLYFM-Swift
、
https://github.com/lb2281075105/LBU25-Swift
fileprivate和open:https://www.jianshu.com/p/604305a61e57
guard
注意事项
1.guard关键字必须使用在函数中。
2.guard关键字必须和else同时出现。
3.guard关键字只有条件为false的时候才能走else语句 相反执行后边语句。
class CloseRange{
let start: Int
let end: Int
init?(startValue: Int , endValue: Int) {
guard startValue < endValue else {
print("结束值 应大于 起始值")
return nil
}
self.start = startValue
self.end = endValue
}
}
let customRange = CloseRange(startValue: 3, endValue: 5)
if let customRange = customRange {
print("第一个对象的起始值是:\(customRange.start)")
}
let customRange2 = CloseRange (startValue: 5, endValue: 3)
if let customRange = customRange2 {
print("第二个对象的起始值是:\(customRange.start)")
}else{
print("第二个对象是空对象");
}
输出结果
第一个对象的起始值是:3
结束值 应大于 起始值
第二个对象是空对象
moya普通调用
ApiProvider.request(.personalData) { (result) in
switch result{
case let .success(res):
do{
let jsonData = try JSONSerialization.jsonObject(with: res.data, options: .mutableContainers)
print(jsonData)
}catch {}
case .failure(_): break
}
}
便利构造器(convenience)
extension UIButton{
//swit中类方法是以class开头的方法,类似于oc中+开头的方法
class func createButton(imageName:String,bgImageName:String)->UIButton{
let btn=UIButton()
btn.setImage(UIImage(named:imageName), for: .normal)
btn.sizeToFit()
return btn
}
/*
convenience:便利,使用convenience修饰的构造函数叫做便利构造函数
便利构造函数通常用在对系统的类进行构造函数的扩充时使用。
便利构造函数的特点:
1、便利构造函数通常都是写在extension里面
2、便利函数init前面需要加载convenience
3、在便利构造函数中需要明确的调用self.init()
*/
convenience init(imageName:String,bgImageName:String){
self.init()
setImage(UIImage(named:imageName), for: .normal)
setBackgroundImage(UIImage(named:bgImageName), for: .normal)
sizeToFit()
}
}
便利构造器不仅可以用在extension里面,同样也可以用在类里。
class InitViewController: UIViewController {
convenience init(_ name: String) {
//这里也是要明确调用self.init()
self.init()
self.username = name;
}
//定义一个存储属性,属性声明最好加一个感叹号,这是因为:如果重写了init方法,不加感叹号的属性都要在init方法中赋值,否则编译报错,加个感叹号就可以在init方法中不初始化该属性。
var username : String!
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.purple
if let username = self.username {
print(username)
}
}
}
使用
//这里构造函数即可以带参数也可以不带参数
let ctrl = InitViewController()
//let ctrl = InitViewController("Coder")
self.present(ctrl, animated: true, completion: nil);
deinit方法
deinit属于析构函数
析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数
和OC中的dealloc 一样的,通常在deinit和dealloc中需要执行的操作有:
-对象销毁
-KVO移除
-移除通知
-NSTimer销毁