从这篇章节起,Swift编程语言指南大部分的重要内容在于概念,代码并非太多。理解Swift的面向对象理念,语法以及类结构,构造析构过程对于非常好的应用Swift语言将会有比較大的帮助。

属性


存储属性

存储属性一般是那些可以通过直接赋值,或者直接訪问成员可以获得的属性类型。
它有些要注意的地方:
若一个结构体被声明为常量,则子属性无法被改动了。在Objective-C中,我们总是无法改动结构体的子属性,可是swift却能够,只是这样的情况是个例外,当你存储型属性是个结构体而且是个常量,那你就不要再试图去改动这个结构体的子属性了。
而类属于引用类型,即使声明为常量我们也能够改动。

延迟载入存储属性

延迟载入我们又称为懒载入,在Swift中提供了一个@lazy用于声明懒载入的属性.
@lazy修饰的属性必须为变量,由于通经常量属性我们必须在构造完毕前赋值,基于这一特性,无法对常量进行懒载入。



这里我们在调用其函数时才对dataList进行訪问,而訪问的时候再依据它是否创建过进行是否载入的决定。


计算属性

计算型属性通常不直接存储值,通过getter来获取值,setter来间接设置其它属性或者变量的值。


结构体rect中,中点center就是通过对自己原点和尺寸数据的计算得来的。
而area变量则是仅仅声明了get方法,我们默认其为仅仅读计算型属性。
事实上我们仅仅读计算型属性也能够省略掉get{}

var area: Double {returnsize.width
*size.height }


属性监视器


在Objective-C中,我们有KVO机制来灵活的监视属性变化,在Swift则用属性监视器来实现。
willSet{} 设置新值前系统回调,若不指名參数名称,则新值用newValue表示
didSet{}  设置完毕后系统回调,若不指名,提供之前值oldValue。



简单的计步器类,在设值前后进行了控制台的输出。
注意这里用到了单例,只是貌似苹果眼下还没有关于Swift的单例实践的推荐方式。

注意这里shared变量使用了classkeyword进行修饰,而结构体Inner中的变量使用了static修饰。这两者分别在类或者值类型中表示类型属性,全部实例共享这一属性。


方法


同Ojbective-C相似,Swift也有类方法和实例方法,使用也非常easy,实例直接声明func就可以,类则须要用class修饰。可是有时我们更喜欢称它为函数。


变异(mutating)

普通情况下,值类型的属性不能在它的实例方法中进行改动,引用也一样,假设要改动须要在方法前用mutatingkeyword进行修饰。


这里这个函数我们须要对刚才定义过的点结构体进行扩展,扩展中改动了其属性,所以须要将函数加mutating修饰。

在变异方法中我们相同能够给self赋值。


一个简单的枚举,在next()函数中完毕了对self的切换。

类方法


上面提到过,类方法值类型如结构体使用static,而引用类型,比如类则使用class。



这里使用类方法完毕了一个简单的工厂方法,事实上在Swift中,若是简单的对属性赋值,我们能够使用便捷(自己定义)构造器来完毕,这点以后写到构造器时会讲到。
另外假设我们在没有实例时,比如在类方法中,使用了self,则self指向这个类型而不是实例。比如Objective-C中的[[self alloc] init]写法。


下标脚本(subscripts)


这个概念在Objective-C中并没有,我们说Swift语法比較灵活和强大,在于它对结构体,枚举,函数的强大功能进行了扩展和支持,比如函数在Swift中属于First-Class级别。

在这里,下标脚本通常能够用于定义在类,结构体和枚举中,我们能够自己定义快捷的訪问方式通过使用下标脚本。对于同一个目标我们能够通过对其函数重载的方式定义多重方式的下标脚本訪问。

基本的语法和使用:





定义了一个三倍计算结构体常量,然后传入索引并获取脚本计算得到的值。

只是须要注意的是,下标脚本參数不同意设置默认值,不同意使用inout对參数进行改动。
一个简单的样例:



这里我们通过下标能高速的訪问这个类实例持有的数据列表对应位置上的值,而不须要在訪问时每次都要写一次訪问其持有的数组在訪问对应的obj。


继承


在Swift中,继承是区分”类”和其他类型的一个基本特征。

基类


不同于OC中的NSObject,Swift中的类并非从一个通用的基类继承而来的。
可是非常多功能Swift通过提供标准库来实现。

子类生成


直接通过 ":"来标识继承关系。
子类试图改动那些继承来的属性时须要先对他们进行初始化。


重写


使用overridekeyword

在重写属性时,必须将名字和类型全写出来,才干使编译器去检查你重写的属性是否与超类匹配。
你能够将仅仅读属性重写为可读写,可是不能将可读写(readwrite)重写为仅仅读(readonly)。

另外我们能够重写属性观察器,但不能够为仅仅读属性及已有setter的属性重写观察器。

同JAVA一样,若防止重写则用@final声明为终于版本号。



以上就是本篇博客的所有内容,欢迎联系本人进行讨论和勘误。

Swift的属性,方法,下标脚本以及继承的更多相关文章

  1. 5.Swift枚举|结构体|类|属性|方法|下标脚本|继承

    1. 枚举: ->在Swift中依然适用整数来标示枚举值,需搭配case关键字 enum  Celebrity{  case DongXie,XiDu,Nandi,BeiGai }  // 从左 ...

  2. Swift枚举|结构体|类|属性|方法|下标脚本|继承

    1. 枚举: ->在Swift中依然适用整数来标示枚举值,需搭配case关键字 enum  Celebrity{  case DongXie,XiDu,Nandi,BeiGai }  // 从左 ...

  3. swift具体解释之八---------------下标脚本

    swift具体解释之八-----下标脚本 下标脚本 能够定义在类(Class).结构体(structure)和枚举(enumeration)这些目标中.能够觉得是訪问对象.集合或序列的快捷方式.不须要 ...

  4. swift学习笔记之-下标脚本

    //下标脚本subscript import UIKit /*下标脚本(Subscripts) 下标脚本: 1.可以定义在类(Class).结构体(structure)和枚举(enumeration) ...

  5. Swift学习笔记(15)--下标脚本(Subscripts)

    下标脚本可以定义在类(Class).结构体(structure)和枚举(enumeration)这些目标中,使用中类似数组或者字典的用法 1.定义 定义下标脚本使用subscript关键字,语法: s ...

  6. Swift - 下标脚本方法介绍及实例

    定义下标脚本之后,可以使用“[]”来存取数据类型的值. 示例1:实现一个我们自定的字符串类,可以方便的通过索引获取某一个字符值,或某一部分字符串.同时也可以通过索引,给某一部分赋值. 1 2 3 4 ...

  7. Swift—下标脚本(Subscripts)

    下标脚本可以定义在类(Class).结构体(Struct).枚举(enumeration)这些目标中,可以认为是访问集合,列表或序列的快捷方式,使用下标脚本的索引设置和获取值,不需要再调用实例的特定的 ...

  8. iOS - Swift Subscript 下标脚本

    1.Subscript 下标脚本允许你通过在实例后面的方括号中传入一个或者多个的索引值来对实例进行访问和赋值.语法类似于实例方法和计算型属性的混合.与定义实例方法类似,定义下标脚本使用 subscri ...

  9. Swift 下标脚本

    前言 在访问一个数组实例的元素时,可以使用 Array[index] 的形式.在访问一个字典实例的元素时,可以使用 Dictionary[index] 的形式.这种方括号的形式就是 "下标脚 ...

随机推荐

  1. MySqlClient访问tinyint字段返回布尔值

    原文 MySqlClient访问tinyint字段返回布尔值 症状: 使用MySqlClient访问tinyint       unsign 字段返回布尔值 true 和        false,但 ...

  2. Mono for Android 初学遇到的问题

    1.搭建开发环境: 在win7系统中,VS2012 可以用 C# 开发Android 应用程序,mono for andriod 破解成功. 在win server 2008 系统中 破解不成功,具体 ...

  3. HDU-1039-Easier Done Than Said?(Java && 没用正則表達式是我的遗憾.....)

    Easier Done Than Said? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/O ...

  4. Linux开发环境的搭建和使用——Linux 常用的命令使用

    概要 视或电影中看到过类似的场景,黑客面对一个黑色的屏幕,上面飘着密密麻麻的字符,梆梆一顿敲,就完毕了窃取资料的任务. Linux 刚出世时没有什么图形界面.全部的操作全靠命令完毕.就如同电视里的黑客 ...

  5. 嵌入式Linux常见问题

    Linux问题集 1 linux设置环境变量及保存地点 1. 显示环境变量HOME $ echo $HOME /home/terry 2. 设置一个新的环境变量WELCOME $ exportWELC ...

  6. 键盘游戏之canvas--用OO方式写

    虽然写的不是很好,但 解释权以及版权仍然归13东倍所有!  <!DOCTYPE HTML> <html> <head> <title>canvas-00 ...

  7. Java经典面试题及详解

    Java基础方面:   1.作用域public,private,protected,以及不写时的区别 答:区别如下:  作用域           当前类       同一package       ...

  8. Android显示GIF图片

    今天我们研究一下怎样在Android手机上显示GIF动态图片 首先须要在src文件夹下新建一个自己定义的View.代码例如以下: </pre><pre name="code ...

  9. JavaScript 中的事件类型2(读书笔记思维导图)

    Web 浏览器中可能发生的事件有很多类型.如前所述,不同的事件类型具有不同的信息,而“ DOM3级事件”规定了以下几类事件: UI(User Interface,用户界面)事件:当用户与页面上的元素交 ...

  10. OCP读书笔记(6) - 手动恢复操作

    6.Restore and Recovery Task 非关键性文件丢失的恢复 临时文件丢失的恢复 临时表空间文件丢失的恢复: 查看数据库中的临时文件: SQL> select file#,ST ...