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

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

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

Swift的属性,方法,下标脚本以及继承此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“”,获取验证码。在微信里搜索“”或者“”或者微信扫描右侧二维码都可以关注本站微信公众号。

从这篇章节起,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声明为终于版本号。



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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Oracle11g安装教程「建议收藏」

    Oracle11g安装教程「建议收藏」oracleScott

  • 好用的在线 java 编译网站,编辑器(亲测)

    好用的在线 java 编译网站,编辑器(亲测)在网上搜了不少在线编译网站,国内外都有。对于java来说,我感觉好用的是这个: 1. https://www.jdoodle.com/online-java-compiler这个支持Java10,并且能够保存代码,还支持导入外部库。但有时候国内登不上,真不明白这个学习网站也封。 2. https://www.tutorialspoint.com/compile_java…

  • 如何构建NTP时间服务器「建议收藏」

    NTP服务器是用于局域网服务器时间同步使用的,可以保证局域网所有的服务器与时间服务器的时间保持一致,某些应用对时间实时性要求高的必须统一时间。互联网的时间服务器也有很多,例如ntpdatentp.fudan.edu.cn复旦大学的NTP免费提供互联网时间同步。NTP服务器监听端口为UDP的123,那就需要在本地防火墙开启运行客户端访问123端口,vi/etc/sysconfig/iptables添加如下规则:-AINPUT-mstate–stateNEW-mudp-pudp

  • 【目标检测】Labelme的改进——海量图片的自动标注「建议收藏」

    【目标检测】Labelme的改进——海量图片的自动标注「建议收藏」  深度学习一般需要对大量的图片进行标注,但是手动标注耗时耗力,所以模仿labelme软件的功能,使用程序对大批量的图片进行自动标注,大大减少手动操作。下面介绍如何实现对大批量的图片进行标注。自动标注的程序实现:https://github.com/shuyucool/Labelme.git程序内容均为原创,如果使用麻烦您点赞呀如遇疑问,欢迎随时交流,定尽量解答。联系方式:7819…

  • webstorm插件开发

    webstorm插件开发前言最近有开发webstrom插件的需求,可是百度一下发现网上关于webstorm插件开发的文章实在是寥寥无几,本文记录一下本次插件开发走的路和踩的坑。希望对后来的同学能有些许的帮助。正文准备工作intelliJ平台的所有插件开发都是基于java语言,所以在进入开发工作之前必须对java语言有一定的了解,本人作为java门外汉,花…

  • JavaScript性能优化-GC算法篇[通俗易懂]

    JavaScript性能优化-GC算法篇[通俗易懂]GC算法简介1、GC是一种机制,垃圾回收器完成具体的工作2、工作的内容就是查找垃圾释放空间、回收空间3、算法就是工作时查找和回收所遵循的规则常见的GC算法1、引用计数2、标记清除3、标记整理4、分代回收GC算法之引用计数算法1、核心思想:设置引用数,判断当前引用数是否为02、引用计数器3、引用关系发生改变时改变引用数字4、引用数字为0是立即回收代码演示如下constuser1={age:10};constuser2={age:20};con.

发表回复

您的电子邮箱地址不会被公开。

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