DahuangPhoneiOSSwift → Swift中的面向对象的属性、方法的介绍


  共有9797人关注过本帖树形打印复制链接

主题:Swift中的面向对象的属性、方法的介绍

帅哥哟,离线,有人找我吗?
dahuangphone
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:407 积分:4533 威望:0 精华:0 注册:2012/9/29 7:54:10
Swift中的面向对象的属性、方法的介绍  发帖心情 Post By:2014/10/11 20:59:54 [只看该作者]

//延时加载


class Emplyee{

    var no:Int=0

    var name:String=""

    lazy var dept:Department=Department()  //lazy,延时加载,只能用于var,不能用于let,用的时候才会初始化,否则不会不初始化,可以减少占用内存

}


struct Department{

    var no:Int=0

    var name:String=""

}



var emp=Emplyee();   //{no 0 name "" nil},dept并没有加载

emp.dept.no=2   //dept加载


//计算属性: 类,结构体,枚举,都可以具有计算属性,设置方法一样

//属性观察者,可以监听属性的变化,即使前后变化相同也可以,不能用于延时储存属性和常量属性的变化,应用范围类和结构体

//静态属性:属性和个体无关,整个类,结构体、枚举共享一个值得属性,称为静态属性或者类属性

//方法是在面向对象(类,结构体,枚举)内的函数,分为实例方法和静态(类型)方法

//静态方法和静态属性都不能方式实例属性和方法的内容


//willSet,didSet不能和get,set同时使用  ,但这几个在全局变量上也可以使用


class Emplyee{

    //储存属性

    var no:Int=0

    

    var willSetFirstName:Bool=false

    

    //属性观察者

    var firstName:String=""{

    willSet(newNameValue){   //将要赋予新值的时候调用,如果删除(newNameValue),默认参数是newValue

        self.willSetFirstName=true

        println("new name :\(newNameValue)")

    }

    didSet(oldNameValue){   //设置完新值后调用,如果删除(oldNameValue),默认值是oldValue

        println("old name : \(oldNameValue)")

    }

    }

    //属性观察者

    

    

    class var printEmpCount:String{ //静态计算属性,用class而不是static

        get{

            return "count:"

    }

    }


    


    var lastName:String=""

    lazy var dept:Department=Department()  //lazy,延时加载,用的时候才会初始化,否则不会不初始化,可以减少占用内存

    

    //计算属性

    var fullName:String{   //必须采用var声明

    get{      //getter访问器

        return firstName+"."+lastName

    }

    //setter访问器,

    //newFullName可以使用默认形参值newValue而省略

    set(newFullName){

        var name=newFullName.componentsSeparatedByString(".")

        firstName=name[0]

        lastName=name[1]

    }

    }

    

    var printName:String{   //只读计算属性,没有setter,下面内容是getter方法。只读属性不能只删除set保留get那么写,那样set依然存在

    return "This is "+lastName+"."+firstName

    }

    

    //实例方法 可以自动将除第一个外的形参变为外部参数,而函数必须在形参前面加#

    func sayName(){

        println(self.fullName)

    }

    

    func sayFullName(fristName:String, lastName:String)->String{

        Emplyee.staticFunc()   // 内部调用静态方法

        return (fristName+"."+lastName)

    }

    

    class func staticFunc(){   //静态方法,class标示,而不是static

        println("this is a staticFunc");

    }

    

}


struct Department{

    var no:Int=0

    var name:String=""

    

    //枚举和结构体方法不能都修改内部属性,必须在方法前面加上 mutating 标示,这个不仅可以修改内部属性,还可以修改自身self

    // func changeName(var newName:String) 是可以修改newName,和mutating的作用不一样的

    //实例方法

    mutating func changeName(newName:String){

        self.name=newName

    }

    

    //静态方法

    static func staticFunc(){

        println("this is staticFunc")

    }

}



var emp=Emplyee();

emp.willSetFirstName

emp.firstName="alex"

emp.willSetFirstName

emp.lastName="wang"

emp.fullName

emp.printName


//调用实例方法

//方法就是类中的函数,但是和函数不痛的时,方法中的第一个参数是局部参数,以后的局部参数会默认为扩展参数,而函数必须要在前面加上#才可以

emp.sayFullName("alex", lastName: "wang");

//调用静态方法

Emplyee.staticFunc();



//调用实例方法

emp.dept.changeName("maketing")

//调用静态方法

Department.staticFunc();


//枚举计算属性


enum E:String{

    case a="a"

    case b="b"

    

    static var enumCount:Int=0  //静态储存属性

    

    

    var abc:String{

    return "abc"+self.toRaw()

    }

}


<!--StartFragment-->
面向对象类型属性
面向对象类型 实例存储属性 静态存储属性 实例计算属性 静态计算属性
支持 不支持 支持 支持
结构体 支持 支持 支持 支持
枚举 不支持 支持 支持 支持
[此贴子已经被作者于2014/10/13 14:37:10编辑过]

 回到顶部