美文网首页
swift基础-构造函数

swift基础-构造函数

作者: CowboyBebop | 来源:发表于2016-09-20 15:22 被阅读38次
    一,如果是继承自NSObject,可以对父类的构造函数进行重写
    //构造函数
    class Person: NSObject {
        var name : String?
        var age :Int = 0
        override init() {
            //在构造函数中,如果没有明确调用super.init(),系统会帮我们调用(仅仅只在构造函数中,其他函数中不会)
            super.init()
         }
        //自定义构造函数
        init(name:String, age : Int) {
            print("----")
            self.name = name
            self.age = age
        }
        init(dict: [String : AnyObject]) {
            // as? 转成可选类型
            // as! 转成确定类型
            self.name = dict["name"] as? String
            //可选类型: 先判断等号后面的有没有值,没有值就不执行后面括号,有值就将等号后面的强制解包赋值给等号前面的
    //        if let tempAge = dict["age"] as? Int{
    //            age = tempAge
    //        }
    
        
        //相当于下面这段代码:
        let tempAge = dict["age"]
        let tempAge1 = tempAge as? Int
        if tempAge1 != nil {
            age = tempAge1!
        }        
      }
    }
    
    let p = Person.init(name: "ss", age: 4)
    let p1 = Person.init(dict: ["name" : "jack","age" : 18])
    

    最后需要注意的点:自定义构造函数,如果没有重写默认的构造函数init(),系统会覆盖掉默认构造函数init(),如果不想覆盖掉,必须重写init()方法

    二,便利构造函数

    1,在OC中当需要对系统的类进行扩充时,我们通常会选择用类别,swift中同样也可以对系统的类扩展方法,

    7522B840-76FD-4679-8BBD-6B0244159C95.png

    2,首先新建个swift file文件,命名为:UIButton-Extension.swift,导入UIKit

    import UIKit
    extension UIButton {
        ///扩展类方法
        class func creatBtn (image : String, bgImage : String) -> UIButton {
        
            let btn = UIButton.init()
            btn.setBackgroundImage(UIImage.init(named: bgImage), forState: .Normal)
            btn.setBackgroundImage(UIImage.init(named: bgImage + "_highlighted"), forState: .Highlighted)
            btn.setImage(UIImage.init(named: image), forState: .Normal)
            btn.setImage(UIImage.init(named: image + "_highlighted"), forState: .Highlighted)
            btn.sizeToFit()
            return btn
        
        }
        ///convenience:便利构造函数
        convenience init(image : String, bgImage : String ){
            //便利构造函数必须得调用 self.init()
            self.init()
            self.setBackgroundImage(UIImage.init(named: bgImage), forState: .Normal)
            self.setBackgroundImage(UIImage.init(named: bgImage + "_highlighted"), forState: .Highlighted)
            self.setImage(UIImage.init(named: image), forState: .Normal)
            self.setImage(UIImage.init(named: image + "_highlighted"), forState: .Highlighted)
            self.sizeToFit()
        }
      }
    
    调用:
    let btn = UIButton.creatBtn("tabbar_compose_icon_add", bgImage: "tabbar_compose_button")
    let btn = UIButton.init(image: "tabbar_compose_icon_add", bgImage: "tabbar_compose_button")
    

    同样的对UIBarButtonItem也可以扩充方法

    import UIKit
    
    extension UIBarButtonItem {
    
       /* 第1种
         convenience init(image : String) {
            self.init()
            let btn = UIButton.init()
            btn.setImage(UIImage.init(named: image), forState: .Normal)
            btn.setImage(UIImage.init(named: image + "_highlighted"), forState: .Highlighted)
            btn.sizeToFit()
            self.customView = btn
        }*/
    
        // 第2种
        convenience init(image : String) {
      
            let btn = UIButton.init()
            btn.setImage(UIImage.init(named: image), forState: .Normal)
            btn.setImage(UIImage.init(named: image + "_highlighted"), forState: .Highlighted)
            btn.sizeToFit()
            self.init(customView:btn)
      }
    }
    
    调用:
    navigationItem.rightBarButtonItem = UIBarButtonItem.init(image: "navigationbar_pop")

    相关文章

      网友评论

          本文标题:swift基础-构造函数

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