Swift

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销毁

上一篇下一篇

猜你喜欢

热点阅读