您的位置:首页 > 移动开发 > Swift

swift学习笔记->类

2015-11-16 20:54 471 查看
swift中类的定义方式

class 类名{

  属性。。。

  方法。。。

}

类是一个引用类型,其实例是分配到堆中 来看看类里面的属性方法有何不同之处

类中的属性分为存储属性,计算属性

存储属性可以有属性观察器 但计算属性没有 (计算属性在类被继承之后可以添加观察者)

计算属性拥有get set 方法

class Person {
//属性,方法,构造函数,析构函数,,索引器(subscript)
//stored properties   computed properties
var p1 = 20
//属性观察器 property observer
var name = "swift" {
willSet{  //在赋值前会调用willSet里面的内容
//            print("before")
print(newValue) //新值
//            print(name)

}
didSet(old){
print("after")
print(old)
print(name);
}
}
var p2 = 30
//计算属性 ,get set
//不能只有set,只有get的时候,表示只读计算属性,可以简写
//计算属性是没有属性观察者
var age:Int {
get{
return 100
}
set{

}
}

var readOnlyAge:Int {
get{
return 100
}
//当只有get属性时推断为只读属性,get可以省去  如下
}

var readOnlyAge2:Int {

//code.
//code。
return 100

}

//    func m() {
//
//    }
//构造函数,可以有多个
init(){
print("init")
}
//
//    deinit {
//        print("deinit")
//    }
//
}


代码上已经能看到两种属性的写法,方法函数与函数篇写的一样 没有什么区别

值得注意的是 在类的实例化(初始化)时,所有属性都必须有值 否则会出错

恒等于 :三个等号是判断两个变量是否指向同一个对象

class test{
let a:Int=4
}
var aa=test()
var bb=test()
aa==bb//报错
aa===bb//false
aa=bb
aa===bb//true


修饰

1修饰为静态,可以用class和static

2存储属性,只能用static,计算属性两个关键字都可以

3方法也是两个关键字都可以

4区别:class修饰的表示子类是可以重写这些静态成员

class Image{
static var name = "my"
//class var name2 = "aaa"//存储属性不能用class修饰
static var Age:Int {
get{
return 100
}set{

}
}
static func someMethod() {

// 静态方法中得self不是指的类的实例,而是指类本身
//self
//self.Age  =
}
class func someMethod2(){

}
}


下标subscript

class XiangCe {
var images = [1,2,3,4]

//下标  subscript,可以有多个参数
subscript(index: Int) ->Int {
get{
return images[index]
}
set{
images[index] =  newValue
}
}

func getImage(index: Int)->Int {
return images[index]
}
}

let xc = XiangCe()
xc.getImage(0)
xc[0]
xc[0] =  100
xc[0]


lazy 延迟加载

当属性加上lazy修饰时 在实例化对象时该属性不会初始化,直到调用该属性时才会进行初始化

下面这个例子能看出lazy的作用

class A{
init(){
print("a init")
}
}

class B {
lazy var p = A()
}

let b = B()
//b.p


实例化B类时没有输出 a init 而访问B类中的P属性时输出了 说明它在访问的时候才进行初始化工作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: