Swift-类

class Class1 {  // 类文件名可以与类名不一样

    //properties 属性

    //methods 方法

    //initializers 初始化

}

 

//继承

class Vehicle:NSObject {   //NSObject可以省略

   //

}

 

class bicycle:Vehicle {

   //

}

 

class TestClass2 {

    var properties1=0       //储值属性

    var ComputedPP:String//算值属性,通常通过储值属性计算得到

        get{               //读属性

           return "properties1=\(properties1)"

       }

        set{               //写属性,set不一定要有

            //可以通过newValue变量访问新值

       }

    }

}

 

 

 

class TestClass3 {

    var properties2:Int?       //储值属性,同时赋默认值0

    var properties22=0        //必须有初始值,or设置为可能值,如properties2

    var ComputedPP:String{     //如果只有get属性,可以缩写如下:

        return "properti es2=\(properties2)"

    }

}

 

letsomeClass=TestClass3()  //内存空间分配也完成了

 

//访问属性

someClass.properties22

//设置属性

someClass.properties2=3

someClass.properties2

 

//初始化

class TestClass4:TestClass3 {

    override init(){   //只是初始化,无返回值(地址啥的)

        super.init()    //父类初始化,可省

        properties2=2   //父类TestClass3的属性

        properties22=2

       

    }

}

let Class4=TestClass4()

Class4.properties2

Class4.properties22

Class4.ComputedPP

 

//属性覆盖

class Car:TestClass2{

   var speed=0.0

   var TestValue: String?

    override init() {

       super.init()

        properties1=4

    }

   override var ComputedPP:String{

       get{

           return "Test"

       }

       set{

           TestValue = newValue

       }

    }

}

 

let car1=Car()

car1.ComputedPP

car1.ComputedPP="haha"

car1.TestValue

 

//属性观察

class ParentsCar:Car {

   override var speed:Double{

       willSet{

            //在这里通过newValue变量访问新值

            //比如:

           if newValue>10{

               println("xxx")

           }

       }

       didSet{

            //在这里通过oldValue变量访问旧值

       }

    }

}

 

在给观察的属性设置一个新值时,会执行willSetdidSet方法

 

//方法

class Counter{

   var count=0

   func incrementBy(amount:Int){

        count+=amount       //count就是上面的属性count

    }

   func resetToCount(count:Int){

        self.count=count    //如果方法的参数跟类属性名冲突,则self.xx是访问类的属性

    }

}

 

//==================================

//===========下面是例子=============//

//==================================

class NamedShape {

   internal var numberOfSides: Int = 0 //store property

   var name: String                   //store property

    var 边长: Int?                      //store property

    var 周长: Int{                      //computed property

       get{

            return numberOfSides * 边长//此处需要强制解析,否则会报错

       }

       set{

            边长 =  newValue / numberOfSides

       }

    }

   init(name: String){

       self.name = name

    }

   func simpleDescription() -> String{

        return "A shape with \(numberOfSides)sides"

    }

}

let newNameShape=NamedShape(name:"ABC"//注意这里,要连参数名(name)一起写才有效

newNameShape.simpleDescription()

newNameShape.name

newNameShape.边长=10

newNameShape.numberOfSides=6

newNameShape.周长

newNameShape.周长=100

newNameShape.边长

 

 

 

classEquilateralTriangle: NamedShape {

   var sideLength = 0.0

   init(sideLength: Double, name1: String){

       self.sideLength=sideLength

       super.init(name:name1)

        numberOfSides=3

    }

    var perimeter: Double{      //周长

       get{

           return 3.0 * sideLength

       }

       set{

            sideLength = newValue / 3.0 //新值的名字默认是newValue

       }

    }

   override func simpleDescription() -> String {

        return "sideLength = \(sideLength)."

    }

    override var 周长: Int {      //重写算值属性

       get{

           return 3 * Int(sideLength)

       }

       set{

           sideLength = Double(newValue) / Double(numberOfSides)

       }

    }

    

}

 

let newtriangle=EquilateralTriangle(sideLength:1.1,name1: "3A" )

newtriangle.perimeter

newtriangle.perimeter = 6.0

newtriangle.sideLength

newtriangle.simpleDescription()

newtriangle.周长

newtriangle.周长=100

newtriangle.sideLength

 

//属性观察的例子

class TriangleAndSquare {

   var 新值: Double?

   var 旧值: Double?

    var triangle : EquilateralTriangle{

       willSet{

           新值 = newValue.sideLength

           println("新值 =\(新值)")

       }

       didSet{

           旧值 = oldValue.sideLength

           println("旧值 =\(旧值)")

       }

    }

    init(size: Double,nameTandS: String){

       triangle=EquilateralTriangle(sideLength:size, name1: nameTandS)

    }

}

let TandS=TriangleAndSquare(size: 10, nameTandS: "等边三角形1")

TandS.triangle=EquilateralTriangle(sideLength:1.0, name1:"HAHA")

 

//比较两个常量或变量是否引用同一个实例

letTandT = TriangleAndSquare(size: 10, nameTandS: "等边三角形1")

let TandS2 = TandS

TandS === TandT // 返回false

TandS !== TandT // 返回true

TandS === TandS2// 返回true

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值