swift入门->类

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属性时输出了   说明它在访问的时候才进行初始化工作

时间: 2024-12-27 18:28:59

swift入门->类的相关文章

IOS开发语言Swift入门连载---类和结构体

IOS开发语言Swift入门连载-类和结构体 类和结构体是人们构建代码所用的一种通用且灵活的构造体.为了在类和结构体中实现各种功能,我们必须要严格按照常量.变量以及函数所规定的语法规则来定义属性和添加方法. 与其他编程语言所不同的是,Swift 并不要求你为自定义类和结构去创建独立的接口和实现文件.你所要做的是在一个单一文件中定义一个类或者结构体,系统将会自动生成面向其它代码的外部接口. 注意: 通常一个类 的实例被称为对象 .然而在Swift 中,类和结构体的关系要比在其他语言中更加的密切,本

Swift入门(五)——数组(Array)

集合 集合的定义 Swift中提供了两种数据结构用于存放数据的集合,分别是数组(Array)和字典(Dictionary).他们的主要区别在于数组中的元素由下标确定,而字典中的数据的值由数据的键(Key)决定.以下我们认为集合就是数组或字典. 集合的可变性 我们可以定义一个集合常量或者集合变量.一旦定义为常量,就意味着集合的长度.内容和顺序都不能再修改了.比如,定义为常量的数组,不能再向其中添加新的元素. 数组的创建 由于swift中变量的创建遵循" var 变量名:变量类型 "的语法

Swift入门(三)——元组(Tuple)

定义 元组是一个包含了若干个相关联变量的对象. 元组的创建 var newTuple = ("kt",20) //由于Swift的类型推导,newTuple被推导为(String,Int)类型的变量 元组的解绑 几个变量一旦联合在一起,组成了一个元组,他们就被"绑定"了,要想从一个元组中单独取出某一个数据时,需要解绑元组. 直接解绑 直接解绑是最简单的一种解绑方式,只要定义若干个变量与元组中的变量一一对应即可. var newTuple = ("kt&qu

Swift入门篇-集合

一:数组 一:可变数组 定义:数组使用有序列表存储相同类型的多重数据. 格式: 第一种格式 var 变量: 类型[] = [变量值,变量值,...] 第二种格式 var 变量 =[变量值,变量值,...] 说明: 1:[变量值,变量值...] 这样表示数组 ,前提是 变量值的类型必须一值.(和其他语言有所不同) 2:上面两种格式都是定义一个数组,数组中的变量值的类型必须一致 3:第一种格式定义的数组,是直接定义数组,第二种格式定义的数组 是编译器通过类型值推导出是数组格式 注意点 1:常量关键字

Swift入门(十二)——利用Extension添加逆序输出字符串方法

Swift好像没有自带逆序输出字符串的方法,于是决定通过拓展(Extension)给String类添加一个逆序输出字符串的reverse方法. 首先新建一个Swift文件,命名规则不太清楚,于是暂且模仿OC叫做String+Operation吧,然后实现我们需要拓展的方法.下面先贴上代码,然后解释一下这段代码. //String+Operation.swifft import Foundation //逆序输出swift中的字符串 extension String{ func Reverse()

Swift入门(十一)——类型转换与is、as操作

三种操作:is.as?和as! Swift是强类型语言,但也允许开发者通过is.as?和as!这三种操作来对类型进行判断和强制转换.其中is用作类型判断,而as?和as!则分别是类型转换的可选形式和强制形式.在这里强调一下,swift中比较常用的向下转换(downcast)是没有as操作符的. 为了方便后面的解释,这里假设定义了三个类,Fruit.Apple和Orange,其中Apple和Orange都继承自Fruit. is操作符 is操作用来判断某一个对象是否是某一个特定的类,它会返回一个b

IOS开发语言Swift入门连载---可选链

IOS开发语言Swift入门连载-可选链 可选链(Optional Chaining) 是一种可以请求和调用属性.方法及下标脚本的过程,它的可选性体现于请求或调用的目标当前可能为空(nil ).如果可选的目标有值,那么调用就会成功:相反,如果选择的目标为空(nil ),则这种调用将返回空(nil ).多次请求或调用可以被链接在一起形成一个链,如果任何一个节点为空(nil )将导致整个链失效. 注意: 的可选链和 Objective-C 中的消息为空有些相像,但是 Swift 可以使用在任意类型中

IOS开发语言Swift入门连载---类型转换

IOS开发语言Swift入门连载-类型转换 类型转换可以判断实例的类型,也可以将实例看做是其父类或者子类的实例. 类型转换在 Swift 中使用is 和 as 操作符实现.这两个操作符提供了一种简单达意的方式去检查值的类型或者转换它的类型. 你也可以用来检查一个类是否实现了某个协议,就像在 Checking for Protocol Conformance部分讲述的一样. 定义一个类层次作为例子 你可以将它用在类和子类的层次结构上,检查特定类实例的类型并且转换这个类实例的类型成为这个层次结构中的

Swift入门很简单

Swift入门很简单 <Swift入门很简单>清华大学出版社,全书共16章,分为3篇. 第 1 篇  介绍了Swift开发环境的搭建.Swift基本应用程序的创建.数据类型.语句.表达式.字符串.集合类型.程序控制结构.函数和闭包等内容: 第 2 篇  介绍了类.继承.枚举类型.结构.构造器.析构方法.扩展和协议等内容: 第 3 篇  介绍了自动引用计数.运算符重载和泛型等内容. 试读下载地址:http://pan.baidu.com/s/1mg0ytVq 随书工具下载地址:http://pa