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的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的中统一处理业务逻辑的一种技术,比较常见的场景是:日志记录,错误捕获 ...
随机推荐
- 《DSP using MATLAB》示例Example5.7
代码: x = [1, 1, 1, 1, zeros(1,4)]; N = 8; % zero-padding operation X_DFT = dft(x,N); % DFT of x(n) ma ...
- wpf,离线状态下部分功能不可用。
离线状态下,设置按钮的不可用.通过改变资源字典的值. App.xaml 文件下添加如下 xmlns:sys="clr-namespace:System;assembly=mscorlib&q ...
- iOS typedef NS_ENUM 与 NSString
//在头文件中声明 typedef NS_ENUM(NSUInteger, TransactionState) { TransactionOpened, TransactionPending, Tra ...
- LogPolar 对数极坐标
LogPolar 对数极坐标 cvLogPolar 对数极坐标(logpolar)是仿真生物视网膜中央凹陷的特性,具有数据压缩的能力,可用于目标跟踪中快速尺度和旋转变换不变的模板匹配. 对数极坐标其实 ...
- YUM源设置
1挂载光盘 先创建一个文件 /aaa 然后挂载mount /dev/cdrom /aaa 进入 /aaa ls 查看是否挂载OK 2进入yum文件夹.将除Media以外的所有文件名改为XXXXXX ...
- php 执行程序分析
记录程序运行细节 记录程序运行时间 <?php $start = microtime(true); //index.php $end = microtime(true); $time = num ...
- c# 获取项目的根目录
编写程序的时候,经常需要用的项目根目录.自己总结如下 1.取得控制台应用程序的根目录方法 方法1.Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径 ...
- django manytomany
转载:http://my.oschina.net/u/572994/blog/105280 例如有如下模型 models.py ? 1 2 3 4 5 6 7 from django.db impor ...
- shared jedis 在spring中的配置
redis 属性文件配置: redis.host=xx.xx.xx.xx redis.port=6379 #redis.pass=xxxxx redis.maxIdle=10000 redis.max ...
- 移动web 公用样式
/*! normalize.css v3.0.2 | MIT License | github.com/necolas/normalize */ /** * 1. Set default font f ...