Swift2.0对象基础知识点有哪些-创新互联

本篇内容介绍了“Swift2.0对象基础知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

丹徒网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站设计等网站项目制作,到程序开发,运营维护。创新互联自2013年起到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。
  • 类与实例(对象)

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

使用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:在任意源文件中都可以访问

“Swift2.0对象基础知识点有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


名称栏目:Swift2.0对象基础知识点有哪些-创新互联
本文网址:http://azwzsj.com/article/desgcc.html