《从零开始学Swift》学习笔记(Day 47)——final关键字

发布时间:2017-11-29 SWIFT

在类的定义中使用final关键字声明类、属性、方法和下标。final声明的类不能被继承,final声明的属性、方法和下标不能被重写。

下面看一个示例:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 final  class  Person { //声明为final,说明它是不能被继承的            var name: String            final  var age: Int     //定义的age属性            final  func description() -> String {   //定义description实例方法          return  "\(name) 年龄是: \(age)"      }            final  class  func printClass() ->() {   //定义printClass静态方法          print(  "Person 打印..." )      }            init (name: String, age: Int){          self.name = name          self.age  = age      } }    class  Student: Person {                             //编译错误            var school: String            convenience init() {          self.init(name:  "Tony" , age:  18 ,school:  "清华大学" )      }            init (name: String, age: Int,school: String) {          self.school = school          super .init(name: name, age: age)      }            override func description() -> String{          //编译错误    //试图重写description实例方法          print( "父类打印 \(super.description())" )          return  "\(name) 年龄是: \(age), 所在学校: \(school)。"      }            override  class  func printClass() ->(){       //编译错误  //试图重写printClass静态方法          print(  "Student 打印..." )      }            override var age: Int {                         //编译错误//试图重写age属性      get {          return  super .age      }      set {          super .age = newValue <  8  8 : newValue      }      } }


定义Student类,并声明为Person子类时,会报如下编译错误:

Inheritance from a finalclass 'Person'

定义的age属性也是final,那么在试图重写age属性时,会报如下编译错误:

Var overrides a 'final'var

定义description实例方法,它被声明为final,那么在试图重写description实例方法时,会报如下编译错误:

Instance method overridesa 'final' instance method

定义printClass静态方法,它被声明为final,那么在试图重写printClass静态方法时,会报如下编译错误:

Class method overrides a'final' class method

使用final可以控制我们的类被有限地继承,特别是在开发一些商业软件时,适当地添加final限制是非常有必要的。



本文转自 tony关东升 51CTO博客,原文链接:http://blog.51cto.com/tonyguan/1747532,如需转载请自行联系原作者

更多相关推荐


在UITouch事件中画圆圈-iOS8 Swift基础教程

发布时间:2015-11-08 SWIFT XCODE
这篇教程主要内容展示如何利用CoreGraphicsFramework画圆圈,当用户点击屏幕时随机生成不同大小的圆,这篇教程在Xcode6和iOS8下编译通过。打开Xcode,新建项目选择SingleViewApplication,ProductName填写iOS8SwiftDrawingCirclesTutorial,OrganizationName和OrganizationIdentifier...

Swift中关于可选类型(?)与强制解析(!)的特性

发布时间:2015-07-03 SWIFT PYTHON
2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt;Swift中问号表示这是一个可选类型,白话翻译:某个常量或者变量可能是一个类型,也可能什么都没有,我不确定它是否真的会有值,也许会是nil。比如:letnumber1=“123”letnumber2=number1.toInt()//number2是Int?类型或者叫optionalIntnumber2,可能包含Int值,也可...

swift4.0类似QQ消息的拖拽黏性效果

发布时间:2018-02-24 RUNTIME SWIFT
Tip:考虑到使用的方便,所有需要用UIView的category实现github地址:https://github.com/zjjzmw1/BlastView需要用到的技术点:1.Category中添加属性(runtime--objc_setAssociatedObject)2.爆炸动画效果(粒子爆炸效果和图片的帧动画2中方式)3.拖拽view的贝塞尔曲线(两个圆,两条线)4.Category中...

云现在占IT支出的四分之一,并且还在快速增长

发布时间:2020-05-19 运维 SWIFT 数据库
KimWeins是Flexera的云战略副总裁。最近一项针对300多位企业IT高管的IT支出调查确定了持续向云计算转变的一些重大影响。代表拥有2000多名员工的公司的《Flexera2020科技支出状况调查》的受访者表示,他们对云的使用正在Swift增长。但是,组织仍在努力管理其云成本以及整体IT支出。企业还预测,这些转变将动摇他们对技术供应商的使用。底线:组织有工作要做,以优化其不断增长且越来越...

Swift函数_inout参数

发布时间:2016-05-08 SWIFT
//无inout参数的函数funcchangeName(varname:String){  name="Hello"  println(name)}letpayerName="你好"println(payerName)//输出:你好changeName(payerName)println(payerName)//输出:你好 (传入的是payerName的副本不是他本身所以payerName的值不会...

swift resource

发布时间:2018-04-26 SWIFT APPLE SWIFT
https://developer.apple.com/swift/resources/TabBarControllerhttps://developer.apple.com/documentationsampleandcodehttps://developer.apple.com/library/content/navigation/starteddevelopiOSbyswifthttps:/...

代码重构(六):代码重构完整案例

发布时间:2016-04-13 移动开发 测试 SWIFT
无论做什么事情呢,都要善始善终呢。前边连续发表了5篇关于重构的博客,其中分门别类的介绍了一些重构手法。今天的这篇博客就使用一个完整的示例来总结一下之前的重构规则,也算给之前的关于重构的博客画一个句号。今天的示例借鉴于《重构,改善既有代码的设计》这本书中的第一章的示例,在其基础上做了一些修改。今天博客从头到尾就是一个完整的重构过程。首先会给出需要重构的代码,然后对其进行分析,然后对症下药,使用之前我...

PHP array_reduce()函数的应用解析

发布时间:2018-11-25 移动开发 SWIFT PHP
实例向用户自定义函数发送数组中的值,并返回一个字符串:?12345678&lt;?phpfunctionmyfunction($v1,$v2){return$v1."-".$v2;}$a=array("Dog","Cat","Horse");print_r(array_reduce($a,"myfunction"));?&gt;定义和用法array_reduce()函数向用户自定义函数发送数组中的...

[iOS] 使用 blockable NSTimer 避免内存泄漏

发布时间:2018-09-19 移动开发 SWIFT
背景此知识点,从阅读《EffectiveObjective-C》中学习到,现扩展到Swift并兼容iOS10+NSTimer提供定时执行任务的功能,可用于延时或者重复处理事务。使用NSTimer执行重复任务时(非重复任务会在触发后自动撤销invalidate),必须注意的是一个内存泄露的问题,原因是iOS10以前Timer基于Target-action的API设计下:OC:+(NSTimer*)s...

Swift定义单例的三种方式

发布时间:2016-04-25 SWIFT JSON
第一种:使用GCD.自定义一个class继承你要继承的类,定义一个静态可选变量,声明一个dispatch_once_t,并赋初始值0(0代表还没有被实例过,如果被实例过了其值始终是1),剩下的和OC定义单例类似1classNetWorkTools:AFHTTPSessionManager{23//MARK:-单例4staticvarinstance:NetWorkTools?5staticvaro...

Swift 的单例模式

发布时间:2014-10-20 SWIFT 单例 设计模式
//定义类方法classfuncshareInstance()-&gt;NetworkDataOperation{structnetSingle{staticvarpredicate:dispatch_once_t=0staticvarinstance:NetworkDataOperation?=nil}//可以保证线程安全,保证只会被调用一次。dispatch_once(&amp;netSing...

cocoapods安装,帮你少走弯路

发布时间:2022-11-23 MACOS RUBY COCOAPODS SWIFT
cocoapods安装1.卸载brew安装的ruby或更新(安装)ruby为什么要更新或安装呢--旧的版本出现无法兼容的情况导致更新出很多问题;如果通过brew方式安装了ruby一直有问题,可以卸载重装下。卸载命令:brewuninstallruby安装命令:brewinstallruby安装完成后输入ruby-v,发现版本还是mac自带的版本,这时需要修改,输入以下两行命令:echo'expor...

基于Swift实现的最小生成树应用-室内布线

发布时间:2018-12-29 布线 SWIFT
1问题内容与目的要求求解最优化问题的算法通常需要经过一系列的步骤,在每个步骤都面临多种选择。对于许多最优化问题,使用动态规划算法求最优解显得大材小用,可以使用更简单、更高效的算法。贪心算法就是这样的算法,它在每一步都做出当时看起来最佳的选择。也就是说能找到最优解的最优化问题。贪心算法并不能保证得到最优解,但对很多问题确实可以求得最优解。贪心方法是一种强有力的算法设计方法,可以很好的解决很多问题。采...

swift 算法 简单44.存在重复元素

发布时间:2019-06-18 SWIFT
给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回true。如果数组中每个元素都不相同,则返回false。示例1:输入:[1,2,3,1]输出:true示例2:输入:[1,2,3,4]输出:false示例 3:输入:[1,1,1,3,3,4,3,2,4,2]输出:true解法:funccontainsDuplicate(_nums:[Int])-&gt;Bool{gu...

Swift3.0 中代理的使用方法

发布时间:2017-03-14 SWIFT IOS
转载:http://blog.csdn.net/feng2qing/article/details/50850773Swift3.0 中代理的使用方法一,在视图界面1.制定协议(不写NSObjectProtocol暂时不会报错,但是写属性是无法写weak)protocolDelegateName:NSObjectProtocol{  //设置协议方法  funcmethod()}//在Swift中...

swift3.0调用相册

发布时间:2017-02-07 SWIFT
swift3.0调用相册首先需要注意:1.swift3.0中调用相机和相册会导致崩溃1.需要在info.plist文件中加入两个键值对,如下:///都是String类型,内容任意的字符串即可Privacy-PhotoLibraryUsageDescriptionPrivacy-CameraUsageDescription2.UIImagePickerControllerSourceType枚举pu...

swift APP发布新版本时报错

发布时间:2017-01-01 SWIFT
我用swift写的新版本APP,想要发布新版本时遇到这样的一个报错,在网上搜了 类似错误 :codesign failed with exit code 1 。但最终结果都不理想,大部分搜出来的都是这样的错:“Command /usr/bin/codesign failed with exit code 1 ”。望求各位大神给与指点,告诉我是哪里错了...

iOS开发学习笔记

发布时间:2015-11-26 移动开发 COCOAPODS SWIFT IOS
 https://cocoapods.org/  pod引入Alamfire出错,动态库use_frameworks!问题http://www.jianshu.com/p/8c9722c29155http://blog.csdn.net/remote_roamer/article/details/47835347http://www.cnblogs.com/ouyangfang/p/4173544...

【AGC】flutter之agconnect_crash在ios上崩溃

发布时间:2022-11-17 AGC SWIFT FLUTTER IOS
 问题背景flutteragconnect_crash-1.2.0+300 运行在ios平台上,出现了如下这个崩溃NSInvalidArgumentException:***+[NSJSONSerializationdataWithJSONObject:options:error:]:valueparameterisnil0CoreFoundation0x00000001830d005c0x183...

Xcode弃用Bitcode,导致应用体积大幅增加

发布时间:2022-11-22 XCODE MACOS IDE SWIFT IOS
👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇出品|OSC开源社区(ID:oschina2013)Emerge是一个监测和减少应用程序大小的平台,可以持续监测并分析应用程序二进制大小,帮助开发者编写更小、更好的代码。近日Emerge发布了一份报告,显示最新版本的Xcode存在会无意中增加应用程序体积的问题。Xcode14于今年9月份正式发布,新版本添加了对Swift5.7的支持,并针对macO...

Swift 基础知识Part2

发布时间:2015-11-03 SWIFT IOS开发
importFoundationprint("Hello,World!")//类的定义classPerson{//定义属性varname:String!varage:Int!//定义一个计算属性varnumber:Int{get{return10}set{print(newValue)}}//类方法staticfunctest(){print("你好八戒")}//这个也是类方法但是用class修饰...

Facebook Sonar:一款可视化及交互式移动应用调试工具

发布时间:2018-06-17 移动开发 COCOAPODS SWIFT
FacebookSonar是一个开源工具集,旨在帮助开发人员以交互式和可扩展的方式检查和理解iOS及Android应用程序的结构和行为。\\根据Facebook工程师EmilSjölander的说法,Sonar基于Stetho的经验基础而构建,Stetho是一个Android调试桥,允许开发人员使用ChromeDevTools调试他们的应用程序,旨在设计出一个更加可扩展的工具,也可用在iOS平台上...

【swift】15-0604 类和结构体

发布时间:2015-06-05 SWIFT
类和结构体属性方法初始化回收和销毁//结构体—武器struct武器{var杀伤=0var弹量=0var名称=“”}//类—主角class主角{var配枪=武器()varHP=0var姓名=“”var职业=“”}//实例//1.创建一个武器//杀伤90,弹量200,名称激光枪let激光枪49=武器(杀伤:90,弹量:200,名称:“激光枪”)//2.创建一个主角阿汤哥49let阿汤哥49=主角()/...

Swift Package Manager工程实践

发布时间:2022-11-16 开发语言 SWIFT IOS
👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇作者丨狐友技术团队来源丨搜狐技术产品(ID:sohu-tech)本文字数:12182字预计阅读时间:31分钟SwiftPackageManager(下文简称SwiftPM)是苹果官方提供的一个用于管理源代码分发的工具,它与Swift构建系统集成在一起,可以自动执行依赖项的下载,编译和链接过程。该工具可以帮助我们编译和链接Swiftpackages(...

swift中,Optional、?与!之间的关系

发布时间:2015-09-22 SWIFT
swift中,Optional、?与!之间的关系 Optional&lt;ClassName&gt;与 ClassName?等价   对 ClassName! 强制取值会导致崩溃(如果对象为nil时候,取值就会崩溃)   imageView!.image是对 imageView强制解包, imageView.image!则是对 image的强制解包,如果解包后发现为nil,则崩溃  除了!与?,还...

Swift开发iOS项目实战视频教程(一)---iOS真简单

发布时间:2017-05-21 SWIFT
本课主要介绍iOS项目的创建、第一个iOS项目的开发、UILabel、UIButton的使用。假设你看完此视频还认为iOS非常难,请你来找我!本教程摒弃枯燥的语法和知识解说,全是有趣有料的项目实战! 视频链接:v.youku.com/v_show/id_XNzI4NDQzNDIw.html高清视频下载:pan.baidu.com/s/1ntHl79B 代码下载:pan.baidu.com/s/1b...

2016 var-vs-let 的停火协定

发布时间:2016-04-21 SWIFT
作者:EricaSadun,原文链接,原文日期:2016-01-29译者:walkingway;校对:Cee;定稿:小锅在Swift开源之前,苹果在其语言进化中SE-0003将var形式的函数参数进行了移除,并且模式匹配将正式出现在Swift3.0中。自那以后,Swift社区一遍又一遍地反对这个决定,尤其是那些在case模式匹配以及if/guard/for语句中使用了var的人们。今天,Swift...

[iOS 10 day by day] Day 2:线程竞态检测工具 Thread Sanitizer

发布时间:2016-08-16 移动开发 测试 SWIFT
本文介绍了Xcode8的新出的多线程调试工具ThreadSanitizer,可以在app运行时发现线程竞态。作者用经典的银行存取钱为例子,示例使用这个工具发现线程不安全的问题。《iOS10daybyday》是shinobicontrols公司编写的系列博客,介绍开发者需要了解的iOS10新特性,每周更新。本系列翻译(文集地址)已取得官方授权。仓薯翻译,欢迎指正:)Shinobicontrols为i...

Swift中你应该知道的一些有用的tips

发布时间:2018-01-03 RUNTIME JAVA SWIFT
本文会详细介绍一些Swift中不为大多数人知,又很有用的知识点。您不必一次性看完,不过或许哪一天这些知识就能派上用场,项目Demo在我的github,您可以下载下来亲自实验一番,如果觉得有用还望点个star以示支持。本文主要的知识点有:@noescape和@autoclosure内联lazy属性函数柯里化可变参数dynamic关键字一些特殊的字面量循环标签@noescape和@autoclosur...

Swift 快速学习方法

发布时间:2016-04-21 SWIFT
http://www.jianshu.com/p/1a2c6723065chttp://www.jianshu.com/p/22e2ad531b2fhttp://www.jianshu.com/p/803f03922d35http://www.jianshu.com/p/a12822a30d32http://www.jianshu.com/p/2a8fb66d5a23http://www.jian...

Swift3.0语言教程字符串与URL的数据转换与自由转换

发布时间:2016-11-21 SWIFT
Swift3.0语言教程字符串与URL的数据转换与自由转换Swift3.0语言教程字符串与URL的数据转换Swift3.0语言教程字符串与URL的数据转换与自由转换,字符串中的字符永久保存除了可以保存在文件中外,还可以保存到URL中,保存到URL中可以不用浪费设备的空间,当然也可以将URL中的内容读取出来,并转换为字符串。首先我们来看如何将字符串中的字符写入到URL中,要想实现此功能,需要使用到N...

SwiftUI入门 - 9.List分组-NavigationView基本使用

发布时间:2022-11-24 前端入门 SWIFTUI SWIFTUI开发 SWIFT IOS
置顶菜鸟入门,各位大佬轻喷,如有谬误之处欢迎讨论建议,也欢迎各位道友与我同行“不积跬步,无以至千里;不积小流,无以成江海”继续上文中已经实现了数据每一个TODO项的完成状态切换、创建时间以及滑动删除功能。同时完成一个数据的抽象,即将数据处理的部分抽象到一个对象内,页面中只管调用即可。那么本文中将实现将TODO项分组,已完成的todo和未完成的todo理应分开展示。并且在todo项为空的时候进行提示...

基于swift的词法分析程序

发布时间:2019-08-14 SWIFT XCODE
一、编写环境OSX10.11.6Xcode7.3.1Swift2.2二、大致过程计算正则式:读入正则表达式对正则表达式处理、建图、生成ε-NFA将ε-NFA去除空节点、转化为NFA将NFA转化为DFA对DFA图进行遍历每个节点,获取到每个节点通过某个字符到达哪下一个状态,并找到终态、构造DFA表、输出显示验证字符串:在成功通过正则表达式构建DFA图的基础上,读入任意字符串从字符串第一个字符、DFA...

用swift写了个词法分析程序

发布时间:2019-07-24 SWIFT 分析程序
最近学习编译原理,用swift写了个词法分析程序,和大家一起交流,详细代码和文档移步 计算正则式:1.读入正则表达式2.对正则表达式处理、建图、生成ε-NFA3.将ε-NFA去除空节点、转化为NFA4.将NFA转化为DFA5.对DFA图进行遍历每个节点,获取到每个节点通过某个字符到达哪下一个状态,并找到终态、构造DFA表、输出显示验证字符串:1.在成功通过正则表达式构建DFA图的基础上,读入任意字...

Swift Explore - 关于 Swift 中的 isEqual 的一点探索

发布时间:2015-12-22 移动开发 SWIFT
在我们进行App开发的时候,经常会用到的一个操作就是判断两个对象是否相等。比如两个字符串是否相等。而所谓的相等有着两层含义。一个是值相等,还有一个是引用相等。如果熟悉Objective-C开发的话,就会知道Objective-C为我们提供了一系列isEqual:方法来判断值相等,而==等于号用来判断引用相等。我们来看一个Objective-C的例子就会更加明白了:NSArray*arr1=@[@"...

【iOS】Swift字符串截取方法的改进

发布时间:2016-01-09 SWIFT
字符串截取方法是字符串处理中经常使用的基本方法。熟悉iOS的朋友都知道在基础类的NSString中有substringToIndex:,substringFromIndex:以及substringWithRange:这三种主要的截取方法。问题描写叙述:那么,Swift语言中的String类是否有相同的截取功能呢?重复查看String类的头文件。并没有找到同样或相似的函数接口。直接在swift文件中...

Swift UIFont

发布时间:2018-04-27 SWIFT
 设置字体titleLabel.font=UIFont.systemFont(ofSize:17.0,weight:.heavy) 转载于:https://www.cnblogs.com/jukaiit/p/8962498.html...

Swift 中的闭包与 C 和 Objective-C中的 blocks 以及其它一些编程语言中的 lambdas 比較类似。...

发布时间:2017-08-17 移动开发 内存管理 SWIFT
闭包是功能性自包括模块,能够在代码中被传递和使用。Swift中的闭包与C和Objective-C中的blocks以及其它一些编程语言中的lambdas比較相似。 闭包能够捕获和存储其所在上下文中随意常量和变量的引用。这就是所谓的闭合并包裹着这些常量和变量,俗称闭包。Swift会为您管理在捕获过程中涉及到的内存操作。注意:假设您不熟悉捕获(capturing)这个概念也不用操心。后面会具体对其进行介...

Objective-C 与 Swift混编补充

发布时间:2016-01-05 OBJECTIVE-C SWIFT IOS
今天需要做一个雷达扩散的效果,其实想来挺逗的,当初在酒运达时就有这个需求,当时也是找到了一个Swift的类,看了下教程感觉混编好麻烦,就放弃了.今天找来找去还是只有这一个,其实挺简单的,但是一开始就进入了一个死胡同,所以又特别的无奈,总之一句话,出来混,迟早要还的.搜索OC与Swift混编,文章很多,基本都是翻译自官方的文档,1.必须要做的,修改一个没有空格的工程名;2.也是必须要做的,设置为ye...

SwiftUI——如何使用新的NavigationStack和NavigationSplitView(如何页面跳转2.0以及如何制作侧栏)

发布时间:2022-11-24 SWIFTUI IOS SWIFT SWIFT/SWIFTUI
从iOS16开始,苹果开始弃用原先的NavigationView,以后会逐渐完全淘汰掉。现在开始使用NavigationStack和NavigationSplitView。NavigationStack的效果和原本的NavigationView一样,而NavigationSplitView则和现在iPadOS上的NavigationView效果一样。最近在iPadOS上面使用NavigationV...

《从零开始学Swift》学习笔记(Day 33)——属性观察者

为了监听属性的变化,Swift提供了属性观察者。属性观察者能够监听存储属性的变化,即便变化前后的值相同,它们也能监听到。属性观察者主要有以下两个:willSet:观察者在修改之前调用。didSet:观察者在修改之后立刻调用。属性观察者的语法格式如下:面向对象类型类型名{    ...    var存储属性:属性数据类型=初始化值{    willSet(新值){//定义willSet观察者。“...