Swift语言中的属性,方法,下标脚本以及继承

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

属性

存储属性

存储属性通常是那些可以通过直接赋值,或者直接访问成员能够获得的属性类型。

它有些要注意的地方:

若一个结构体被声明为常量,则子属性无法被修改了。在Objective-C中,我们总是无法修改结构体的子属性,但是swift却可以,不过这种情况是个例外,当你存储型属性是个结构体并且是个常量,那你就不要再试图去修改这个结构体的子属性了。

而类属于引用类型,即使声明为常量我们也可以修改。

延迟加载存储属性

延迟加载我们又称为懒加载,在Swift中提供了一个@lazy用于声明懒加载的属性.

@lazy修饰的属性必须为变量,因为通常常量属性我们必须在构造完成前赋值,基于这一特性,无法对常量进行懒加载。

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

计算属性

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

结构体rect中,中点center就是通过对自己原点和尺寸数据的计算得来的。

而area变量则是只声明了get方法,我们默认其为只读计算型属性。

其实我们只读计算型属性也可以省略掉get{}

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

属性监视器

在Objective-C中,我们有KVO机制来灵活的监视属性变化,在Swift则用属性监视器来实现。

willSet{} 设置新值前系统回调,若不指名参数名称,则新值用newValue表示

didSet{}  设置完成后系统回调,若不指名,提供之前值oldValue。

简单的计步器类,在设值前后进行了控制台的输出。

注意这里用到了单例,不过貌似苹果目前还没有关于Swift的单例实践的推荐方式。

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

方法

同Ojbective-C相似,Swift也有类方法和实例方法,使用也很简单,实例直接声明func即可,类则需要用class修饰。但是有时我们更喜欢称它为函数。

变异(mutating)

一般情况下,值类型的属性不能在它的实例方法中进行修改,引用也一样,如果要修改需要在方法前用mutating关键字进行修饰。

这里这个函数我们需要对刚才定义过的点结构体进行扩展,扩展中修改了其属性,所以需要将函数加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通过提供标准库来实现。

子类生成

直接通过 ":"来标识继承关系。

子类试图修改那些继承来的属性时需要先对他们进行初始化。

重写

使用override关键字

在重写属性时,必须将名字和类型全写出来,才能使编译器去检查你重写的属性是否与超类匹配。

你可以将只读属性重写为可读写,但是不能将可读写(readwrite)重写为只读(readonly)。

另外我们可以重写属性观察器,但不可以为只读属性及已有setter的属性重写观察器。

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

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

Swift语言中的属性,方法,下标脚本以及继承,布布扣,bubuko.com

时间: 2024-10-19 20:06:12

Swift语言中的属性,方法,下标脚本以及继承的相关文章

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

1. 枚举: ->在Swift中依然适用整数来标示枚举值,需搭配case关键字 enum  Celebrity{  case DongXie,XiDu,Nandi,BeiGai }  // 从左到右对应0,1,2,3 enum CompassPoint { case North case South case East case West //enum中可以定义方法 func show(){ print(self) } } //定义enum 变量 var p = CompassPoint.Nor

Swift语言中的集合类——字典 使用方法

字典 字典是一种存储相同类型多重数据的存储器.每个值(value)都关联独特的键(key),键作为字典中的这个值数据的标识符.和数组中的数据项不同,字典中的数据项并没有具体顺序.我们在需要通过标识符(键)访问数据的时候使用字典,这种方法很大程度上和我们在现实世界中使用字典查字义的方法一样. Swift 的字典使用时需要具体规定可以存储键和值类型.不同于 Objective-C 的NSDictionary和NSMutableDictionary 类可以使用任何类型的对象来作键和值并且不提供任何关于

Swift学习笔记十二:下标脚本(subscript)

下标脚本就是对一个东西通过索引,快速取值的一种语法,例如数组的a[0].这就是一个下标脚本.通过索引0来快速取值.在Swift中,我们可以对类(Class).结构体(structure)和枚举(enumeration)中自己定义下标脚本的语法 一.常规定义 class Student{ var scores:Int[] = Array(count:5,repeatedValue:0) subscript(index:Int) -> Int{ get{ return scores[index];

Swift语言中的泛型编程 【Generic】【Part 1】

泛型  泛型编程让你可以编写更具扩展性.易重用的功能,代码使用时的类型取决于你所定义的业务需求.你可以编写避免重复的代码,目标更加清晰明确,风格抽象. 泛型是Swift语言的一项强大的特性,基本上所有的swift标准库都建立在泛型代码上.实际上,你在这本书的时候不知不觉地接触到泛型,它贯穿始终.例如Swift的数组和字典类型都是泛型集合.你可以创建用于存放整数值的数组,也创建数组存储字符串,其他所有能在Swift中创建的类型都可以创建到数组中.类似的,你可以创建字典来存储数值或其他指定的类型,毫

?Swift语言中为外部参数设置默认值,可变参数,常量参数,变量参数,输入输出参数

引用自这里:Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数 目录[-] 7.4.4  为外部参数设置默认值 7.4.5  可变参数 7.4.6  常量参数和变量参数 7.4.7  输入-输出参数 7.4.4  为外部参数设置默认值 开发者也可以对外部参数设置默认值.这时,调用的时候,也可以省略参数传递本文选自Swift1.2语言快速入门v2.0. [示例7-11]以下的代码就为外部参数toString.withJoiner设置了默认的参数"Swift"和&qu

Swift语言中如何使用JSON数据教程

原文:Swift语言中如何使用JSON数据教程 这是一篇翻译文章,原文出处:http://www.raywenderlich.com/82706/working-with-json-in-swift-tutorial JSON(全称:JavaScript Object Notation),是网络服务中传输数据的常用方法,JSON因为容易使用,且可读性强, 所以非常受到欢迎. 下面是个JSON的一个片段: [ {"person": {"name":"Dani

?Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数

Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数 7.4.4  为外部参数设置默认值 开发者也可以对外部参数设置默认值.这时,调用的时候,也可以省略参数传递本文选自Swift1.2语言快速入门v2.0. [示例7-11]以下的代码就为外部参数toString.withJoiner设置了默认的参数"Swift"和"---".代码如下: import Foundation func join(string s1: String, toString

C语言中常用计时方法总结

转自:http://blog.csdn.net/fz_ywj/article/details/8109368 C语言中常用计时方法总结 1. time() 头文件:time.h 函数原型:time_t time(time_t * timer) 功能:返回以格林尼治时间(GMT)为标准,从1970年1月1日00:00:00到现在的此时此刻所经过的秒数. 用time()函数结合其他函数(如:localtime.gmtime.asctime.ctime)可以获得当前系统时间或是标准时间. 用difft

在 Swift 语言中更好的处理 JSON 数据:SwiftyJSON

SwiftyJSON能够让在Swift语言中更加简便处理JSON数据. With SwiftyJSON all you have to do is: ? 1 2 3 4 let json = JSONValue(dataFromNetworking) if let userName = json[0]["user"]["name"].string{   //Now you got your value } And don't worry about the Opti