Swift2.0对象基础知识点有哪些
admin
2023-02-10 07:20:10
0
  • 类与实例(对象)

类“是引用类型”,而非“值类型”

使用class关键字定义类

     class People {

         var name:String = ""

         var age = 0

     }

     People是类名

     {}包含类的主体部分,包括属性和行为

     命名规范:类名首字母大写

通过类可以创建实例变量或实例常量

     var p1:People = People()

     let p2 = People()

     People()表示调用了People类的构造器

实例对象通过 . 运算符 访问属性和行为

  • 属性

可以带默认值,也可以不带默认值(稍后介绍)

可以是变量,也可以是常量,常量必须有默认值

属性的类型也可以是可选类型

属性可以分成两大类:

     存储属性:占用存储空间

     行为属性:不占用存储空间,访问属性时实际上是调用方法

静态存储属性:

    使用static声明,属于整个类型而不是某个实例对象

     通过类名访问静态存储属性

惰性存储属性:(存储属性)

     这种属性只有到了一段时间后或某个条件出发后才会存在

     在此之前,该属性仅仅是占位,无存储空间

     惰性属性实现了类似懒加载的功能(当属性的值需要复杂或大量计算时)

     关键字:lazy,必须是变量,必须有初值,如:

     class People {

         var name:String = ""

         lazy var age = 0

         func printAge() {

             print("age is \(age)")

         }

     }     

     var p1:People = People()

     p1.printAge()

     在创建完p1实例后,通过调试器可以查看到age.storage=nil

     在调用printAge()方法后,由于访问到了age属性,通过调试器可以看到age.storage=0

     惰性属性的初值通常设定为函数的返回值或对象,以实现懒加载的功能

行为属性:

     虽是属性但没有实际存储空间,提供取值访问器get和赋值访问器set

     行为属性必须是变量,不能有初值

     get的语法:

          var 行为属性:类型 {

               get {

                    return 符合类型的值

               }

          }

     可简化为:

          var 行为属性:类型 {

                    return 符合类型的值

          }

     set的语法:

          var 行为属性:类型 {

               set (newValue) {

                    //操作

               }

          }

     可简化为:

          var 行为属性:类型 {

               set {//操作}//省略的参数名默认为newValue

          }

     如:

     class People {

         var mindDesc:String = ""

         var dream:String = ""

         var reality:String = ""

         var isHappy:Bool {

             get {

                 if (!dream.isEmpty && dream == reality) || mindDesc == "Happy"  {

                     return true

                 }

                 else {

                     return false

                 }

             }

             set(newValue) {

                 if ( newValue ) {

                     mindDesc = "Happy"

                 }

                 else {

                     mindDesc = "No Happy"

                 }

             }

         }

     }

     var p1 = People()

     p1.isHappy = true

     //p1.dream = "中500万"

     //p1.reality = "没中奖"

     print(p1.mindDesc)

     print(p1.isHappy)

     如果不提供set赋值访问器,则该属性是只读的,如:

    var isHappy:Bool {
        if (!dream.isEmpty && dream == reality) || mindDesc == "Happy"  {
            return true
        }
        else {
            return false
        }

    }

类行为属性:

     类行为属性是一种特殊的行为属性,属于整个类型,而不属于某个实例对象

     使用class修饰,通过类名访问

     也可称作是静态行为属性(static一般用于结构体、枚举,class用于类类型)

     语法:   class var 属性名:类型 { get/set{} }

     如:

     class People {

         class var maxHeight:Float {

             return 2.40

         }

     }

     print(People.maxHeight)

属性的观察器:

     用于检测属性变化的周期,分成willSet和didSet两个观察期

     语法:willSet(newValue){}  didSet(oldValue)     //参数都可以省略

     如:

    class People {
        var salary:Int = 200 {

            willSet{

                print("工资调整了!")

            }
            didSet{
                if salary > oldValue  {
                    print("涨工资了!")
                }
                else if  salary < oldValue  {
                    print("降工资了!")
                }
            }
        }
    }
    var p1:People = People()
    p1.salary = 300

    p1.salary = 150

     属性观察器实现了类似KVO模式的功能

     属性观察器同样适用于全局变量和局部变量,其中全局变量可理解为省略了lazy的惰性行为变量

  • 方法

方法是与类型相关联的函数,是类应具有的行为动作,与C++/Java这些语言不同的是:在结构体和枚举中都可以定义方法

对象方法:

     实例方法通过实例对象通过.运算符调用

     如:

    class People {
        var salary:Int = 200
        func receiveSalary(date:String)->Int {
            print("发 \(date) 工资了!")
            return salary
        }
    }
    var p1:People = People()
    var s = p1.receiveSalary("2016年2月")

    print("salary is \(s)")

     在实例方法内部可以直接访问属性,因为属性的作用域是在类的内部

     在实例方法内部可以直接调用实例方法,因为实例方法的作用域是在类的内部

     注意:方法也是函数,函数的规则都是支持的

类方法:

     与类型属性类似,不属于某个实例对象,而是属于整个类,通过类名调用

     语法:class func 方法名(参数列表)->返回值 {}

     也称“静态方法”(static用于结构体、枚举,class用于类类型)

     如:

    class People {
        class var desc:String {
            return "人类"
        }
        class func printDesc() {
            print("我们是\(desc)")
        }

    }

    People.printDesc()

     需要注意的是:在类方法内部,只能访问类行为属性、静态属性和类方法

方法中的self关键字:

     在对象方法中,self表示当前实例对象

     在类方法中,self表示当前类

下标脚本方法:

     是Swift提供的一种特殊对象方法,对象通过下标s运算符调用下标方法

     语法:subscript(参数列表)->返回值 { get/set访问器 }

     如:

    class People {

        var names:[Int:String] = [:]

        subscript(index:Int)->String? {
            get {
                return names[index]
            }
            set {
                names[index] = newValue
            }
        }

    }

    var p:People = People()
    p[001] = "张三"
    p[007] = "李四"
    print(p[001]!)

    print(p[007]!)

     下标方法的参数可以是多个,甚至是可变的,不能用inout修饰,不能设置默认参数值

     下标方法可以重载,也可以只读,如:

    class People {

        var names:[Int:String] = [:]

        subscript(index:Int)->String? {
            get {
                return names[index]
            }
            set {
                names[index] = newValue
            }
        }
        subscript(index:Int, appendString:String )->String? {
            get {
                let s:String? = names[index]!+appendString
                return s
            }
        }

    }

    var p:People = People()
    p[001] = "张三"
    p[007] = "李四"

    print(p[001]!)

    print(p[007, "哈喽"]!)

  • swift的访问权限

三个访问权限修饰符:private  internal public

     访问权限的控制不是基于类的,而是基于文件的,即修饰标识符在哪些源文件中可以进行访问

     可修饰的标识符:类名、结构体名、枚举名、方法名、属性名等

     private:只能在当前的源文件中访问

     internal:只能在当前源文件所在的模块中访问(默认权限,可以不写)

     public:在任意源文件中都可以访问

相关内容

热门资讯

德国总理:美国正在被伊朗羞辱 德国之声4月27日报道,德国总理默茨在访问一所学校时表示,在当前的持续冲突中,伊朗领导层正试图羞辱美...
理响中国|“长”歌以行,风云激... 光阴如梭,东方潮阔。这里是中国的长三角,世界的长三角。无论过去、现在还是未来,这片土地都因时代而生,...
白宫:特朗普及其国安团队开会讨... 新华社华盛顿4月27日电 美国白宫新闻秘书莱维特27日在记者会上证实,总统特朗普及其国家安全团队当天...
人民日报刊文:日本放开杀伤性武... 日本放开杀伤性武器出口推高地缘冲突风险(国际论坛)常思纯《人民日报》(2026年04月28日 第 0...
医疗保障法草案二审:明确生育保... 满足多样化健康保障需求本报记者 彭 波4月27日,医疗保障法草案二审稿提请十四届全国人大常委会第二十...
天津一景区发生自转旋翼机事故1... 澎湃新闻记者 吕新文中国民用航空华北地区管理局4月22日公布《豪客通航“10•1”天津长芦汉盐旅游区...
卡塔尔埃米尔与美国总统特朗普通... 当地时间24日,卡塔尔埃米尔塔米姆与美国总统特朗普通电话,重点就中东地区局势以及伊朗与美国谈判问题交...
男子30年前被扣押2859克黄... 澎湃新闻记者 王鑫家住辽宁省大连市的潘永嘉近日向澎湃新闻反映称,三十年前,他在大连周水子机场被盖州市...
商务部:取消反制欧盟两家金融机... 中华人民共和国商务部令二〇二六年 第1号鉴于欧盟已取消对中国两家金融机构的制裁措施,现公布《关于取消...
过去24小时共有5艘船只通过霍... 总台记者当地时间24日获悉,过去24小时内,共有5艘船只通过霍尔木兹海峡,其中包括一艘伊朗油轮。(总...