swift:谈谈swift几种常见属性的区别
一、前奏
Swift作为一门新语言,经过几年的发展,逐渐趋于完善,目前已经更新到3.0版本,它汇集许多其他语言的特点,例如JS、Paython、C++等,完全区别于OC。个人感觉它没有完全的OOP和OOD的性质。
二、谈谈几种属性的区别
存储属性
定义:实实在在存储常量和变量的
计算属性
定义:依赖于存储属性,通过计算得出来,它提供getter访问值,提供setter方法间接给其他属性或者变量设置值
类属性
定义:其本质其实就是一个全局属性,在类里限定了其作用域,用关键字static(用于结构体和枚举中)或者class(用于类中)修饰
懒加载属性
定义:该属性在使用的时候初始化一次,用关键字lazy修饰,必须进行初始化,非实例属性懒加载时在大括号{}后面要加上()
全局属性
定义:类外面的属性,作用域全局。类似于OC的static修饰的属性
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//实例属性
let p = Person()
//存储属性
print(p.age)
//懒加载属性
print(p.name)
//类属性
print(Person.height)
//计算属性
print(p.getAge)
//全局属性
print(commonProperty)
}
}
//全局属性
var commonProperty = {()->String in
print("Common Property1")
return "Common Property"
}() //类型属性,此处struct也可以是enum枚举
struct AnyStructure{
static var storedTypeProperty = "Some value"
static var computedTypeProperty:Int{
return 100
}
} class Person{
//类属性
class var height = {()->Int in
print("Static Properties")
return 170
}()
//存储属性
var age = {()->Int in
print("Store properties")
return 26
}()
//计算属性
var getAge:Int{
get{
print("Computed Properties")
return age
}
}
//懒加载属性
lazy var name = {()->String in
print("Lazy Properties")
return "Lazy liyang"
}()
//构造方法
init(){
print("init")
}
}
三、总结:基于类,类的构造
- 存储属性,最先被初始化
- 构造方法,仅次于存储属性调用,可以在这里对存储属性进行赋值
- 懒加载属性、类属性、全局属性都是在第一次使用的时候初始化一次,以后调用都不在初始化
- warning:当懒加载属性是基于一个存储属性计算的时候,切勿使用懒加载属性,采用计算属性
swift:谈谈swift几种常见属性的区别的更多相关文章
- JAVA几种常见的编码格式(转)
简介 编码问题一直困扰着开发人员,尤其在 Java 中更加明显,因为 Java 是跨平台语言,不同平台之间编码之间的切换较多.本文将向你详细介绍 Java 中编码问题出现的根本原因,你将了解到:Jav ...
- 【Swfit】Swift与OC两种语法写单例的区别
Swift与OC两种语法写单例的区别 例如写一个NetworkTools的单例 (1)OC写单例 + (instancetype)sharedNetworkTools { static id inst ...
- 简单谈谈Python中的几种常见的数据类型
简单谈谈Python中的几种常见的数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等 ...
- (转)四种常见的 POST 提交数据方式
四种常见的 POST 提交数据方式(转自:https://imququ.com/post/four-ways-to-post-data-in-http.html) HTTP/1.1 协议规定的 HTT ...
- JavaScript 中 4 种常见的内存泄露陷阱
了解 JavaScript 的内存泄露和解决方式! 在这篇文章中我们将要探索客户端 JavaScript 代码中常见的一些内存泄漏的情况,并且学习如何使用 Chrome 的开发工具来发现他们.读一读吧 ...
- C# DataGridView绑定数据源的几种常见方式
开始以前,先认识一下WinForm控件数据绑定的两种形式,简单数据绑定和复杂数据绑定. 1. 简单的数据绑定 例1 using (SqlConnection conn = new SqlConnect ...
- 移动Web开发图片自适应两种常见情况解决方案
本文主要说的是Web中图片根据手机屏幕大小自适应居中显示,图片自适应两种常见情况解决方案.开始吧 在做配合手机客户端的Web wap页面时,发现文章对图片显示的需求有两种特别重要的情况,一是对于图集, ...
- Swift入门系列--Swift官方文档(2.2)--中文翻译--About Swift 关于Swift
About Swift 关于Swift 官方文档的翻译,仅供参考,本人英语本就不好,边学边翻译,不喜勿喷. Swift is a new programming language for iOS, O ...
- C# 实现AOP 的几种常见方式
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的中统一处理业务逻辑的一种技术,比较常见的场景是:日志记录,错误捕获 ...
随机推荐
- kettle系列-2.kettle源码结构分析
kettle是一个开源产品,产品本身设计是很优秀的,代码应该是很多开源爱好者用业余时间贡献的,代码整体结构还是比较容易理解的,但具体到每一个控件内部就因人而异了,感觉还是挺复杂的,肯定别人考虑得比较全 ...
- rhel5.8安装oracle 10g ASM
1.所有的配置和文件系统一样 2.规划: 加了8块小盘,ASM为了实验使用asmlib驱动(rhel6不再支持asmlib驱动),裸设备的2种方法(rowdevice和udev) 三块盘使用asmli ...
- C++静态库与动态库
C++静态库与动态库 这次分享的宗旨是--让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择.这里不深入介绍静态库.动态库的底层格式,内存布局等,有兴趣的同学,推荐一 ...
- RHCS 6.5 由于resource-agents-3.9.2-40.el6版本过低导致rgmanager[61164]: [fs] umount failed - REBOOTING问题的解决
問題描述: RHEL 6.5版本RHCS在disable或者relocate service的時候,會導致節點重啟,查看日誌顯示umount掛载點失敗,日誌如下: Nov 29 16:03:50 ph ...
- service 03 iis之服务器无访问权限
这两天在Service 03 的iis 6.0 里面配置一个aspx 的网站 ,总是遇到一个问题 401.2 无权限访问,于是去百度了一下好多的方法,基本上是关于设置匿名用户,打开IUSER用户 ...
- dp表模型-如何写出for循环动态规划
题目很肤浅.. 但是这件事我们要做.. 那么有一种方法叫做刷表法.. 当你发现这个问题具有最优子结构,重叠子问题时 那么这是一个dp问题是使用本方法的前提 画出该dp状态所对应的矩阵 画出转移关系线. ...
- DirectShow
1 最简单的DirectShow应用程序 — 播放视频 1.简介DirectShow是DirectX中的一套处理媒体播放.音视频采集的开发包,在DirectX SDK Summer 2004(Dire ...
- Sizeof面试题
sizeof()功能:计算数据空间的字节数1.与strlen()比较 strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素. ...
- Android 高亮显示文本中的关键字
总结:SpannableString用好,可以各种替换Span来操作各种内容 1.文本关键字高亮关键在于:SpannableString使用 主要就是通过关键字在文本的开始index,结束index来 ...
- 基础知识:Q&A
1.点乘几何意义? >0,a,b同向,=1时,方向完全相同 =0,垂直 <0,反向,=-1时,方向完全相反 2.叉乘几何意义?叉乘得到的向量的方向怎么确定? aXb ,可以得到 同时垂直于 ...