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

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

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

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

属性


存储属性

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

延迟载入存储属性

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

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


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


计算属性

计算型属性通常不直接存储值,通过getter来获取值,setter来间接设置其它属性或者变量的值。
Swift的属性,方法,下标脚本以及继承


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

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


属性监视器


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

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


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

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


方法


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


变异(mutating)

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


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

在变异方法中我们相同能够给self赋值。
Swift的属性,方法,下标脚本以及继承


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

类方法


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

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


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


下标脚本(subscripts)


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

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

基本的语法和使用:

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


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


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

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

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


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


继承


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

基类


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

子类生成


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


重写


使用overridekeyword

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

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

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



以上就是本篇博客的所有内容,欢迎联系本人进行讨论和勘误。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117928.html原文链接:https://javaforall.net

(0)
上一篇 2021年12月16日 下午3:00
下一篇 2021年12月16日 下午3:00


相关推荐

  • Java简历模板(三十个模板随意选)

    Java简历模板(三十个模板随意选)前言好的简历模板可以让自己在众多面试者中脱颖而出也是挣马内的第一步今天博主就给大家分享一波博主珍藏 18 年的一些模板需要的可以加 q 或者私信或评论都可此处只展示几个例子需要 call 我记得一键三连呦模板模板一 月薪十万法坦嫦娥 模板二 月薪二十万法师妲己 模板三 月薪三十万射手伽罗 模板四 月薪四十万上单关羽 模板五 月薪五十万打野兰陵王 模板六 月薪六十万墨大炮

    2026年3月18日
    2
  • iOS 判断字符串中含有某个字符串 rangeOfString

    iOS 判断字符串中含有某个字符串 rangeOfString在iOS8以后,还可以用下面的方法来判断是否包含某字符串:NSString*women=@"Heyyouarebitch?";if([womencontain

    2022年7月1日
    23
  • 基本知识 100136

    基本知识 100136基本知识100136单选题A11.疑为多囊卵巢综合征,行超声检查的最佳时间是pcos超声检查在月经周期或黄体酮撤退后出血的3~5日进行,显示卵巢体积增大,双侧卵巢均有ge;12个直径2~9mm的小卵泡,即卵巢多囊改变。答案:(D)A:月经期B:月经来潮6小时内C:月经前数日D:月经周期的3~5日E:排卵期单选题A12.关于萎缩性阴道炎,叙述正确的是答案:(C)A:萎缩性阴道炎仅见于绝经后女性B:萎缩性阴道炎阴道pH

    2025年12月12日
    5
  • 菜鸟学SSH(十八)——Hibernate动态模型+JRebel实现动态创建表

    菜鸟学SSH(十八)——Hibernate动态模型+JRebel实现动态创建表

    2022年1月29日
    47
  • Linux 操作系统原理 — 操作系统的本质「建议收藏」

    Linux 操作系统原理 — 操作系统的本质「建议收藏」目录文章目录目录操作系统的起源操作系统和高级编程语言使硬件抽象化操作系统的起源在操作系统尚不存在的年代,人们通过各种按钮来控制计算机,这一过程非常麻烦。于是,有人开发出了仅仅具有加载和运行功能的监控程序(Supervisor),这就是操作系统的原型。通过监控程序,程序员可以根据需要将各种应用程序加载到内存中运行。虽然仍旧比较麻烦,但现在开发的工作量得到了很大的缓解。随着时代的发展,人们…

    2025年7月1日
    4
  • linux连接Redis客户端

    linux连接Redis客户端linux命令下载redis-stable#官网下载,这里使用wget直接下载的[linux]$wgethttp://download.redis.io/redis-stable.tar.gz#解压[linux]$tar-xzvfredis-stable.tar.gz#进入解压目录[linux]$cdredis-stable#编译[linux]$make#拷贝入bin目录[linux]$cpsrc/redis-cli/usr/local/bin/验证redi

    2022年5月5日
    58

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号