Swift5 笔记

作者: 路有点颠簸 | 来源:发表于2020-04-24 16:32 被阅读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销毁

    相关文章

      网友评论

        本文标题:Swift5 笔记

        本文链接:https://www.haomeiwen.com/subject/ckgxphtx.html