一、前奏

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几种常见属性的区别的更多相关文章

  1. JAVA几种常见的编码格式(转)

    简介 编码问题一直困扰着开发人员,尤其在 Java 中更加明显,因为 Java 是跨平台语言,不同平台之间编码之间的切换较多.本文将向你详细介绍 Java 中编码问题出现的根本原因,你将了解到:Jav ...

  2. 【Swfit】Swift与OC两种语法写单例的区别

    Swift与OC两种语法写单例的区别 例如写一个NetworkTools的单例 (1)OC写单例 + (instancetype)sharedNetworkTools { static id inst ...

  3. 简单谈谈Python中的几种常见的数据类型

    简单谈谈Python中的几种常见的数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等 ...

  4. (转)四种常见的 POST 提交数据方式

    四种常见的 POST 提交数据方式(转自:https://imququ.com/post/four-ways-to-post-data-in-http.html) HTTP/1.1 协议规定的 HTT ...

  5. JavaScript 中 4 种常见的内存泄露陷阱

    了解 JavaScript 的内存泄露和解决方式! 在这篇文章中我们将要探索客户端 JavaScript 代码中常见的一些内存泄漏的情况,并且学习如何使用 Chrome 的开发工具来发现他们.读一读吧 ...

  6. C# DataGridView绑定数据源的几种常见方式

    开始以前,先认识一下WinForm控件数据绑定的两种形式,简单数据绑定和复杂数据绑定. 1. 简单的数据绑定 例1 using (SqlConnection conn = new SqlConnect ...

  7. 移动Web开发图片自适应两种常见情况解决方案

    本文主要说的是Web中图片根据手机屏幕大小自适应居中显示,图片自适应两种常见情况解决方案.开始吧 在做配合手机客户端的Web wap页面时,发现文章对图片显示的需求有两种特别重要的情况,一是对于图集, ...

  8. Swift入门系列--Swift官方文档(2.2)--中文翻译--About Swift 关于Swift

    About Swift 关于Swift 官方文档的翻译,仅供参考,本人英语本就不好,边学边翻译,不喜勿喷. Swift is a new programming language for iOS, O ...

  9. C# 实现AOP 的几种常见方式

    AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的中统一处理业务逻辑的一种技术,比较常见的场景是:日志记录,错误捕获 ...

随机推荐

  1. 【Java EE 学习 28 下】【Oracle面试题2道】【Oracle练习题3道】

    一.已知程序和数据 create table test1 (id int primary key, name ), money int); ,); ,); ,); ,); 要求根据下图写出相应的sql ...

  2. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-完整应用例子-在线聊天室系统-下载配置

    一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...

  3. jquery实现页面交互的几个小例子

    翻看了以前留下的笔记,发现自己竟然做过这么多的页面交互效果,没有使用原生js,全是通过jquery实现的,于是把他们整理下来,附上表现效果图及源代码 1 业务应用:授权商品组和删除商品组 本质:复选框 ...

  4. java中的权限修饰符的理解

    首先了解概念: 在java中有四种权限修饰符:范围从大到小分别是:public.protect.default(friendly).private,它们之间的区别是: public: Java语言中访 ...

  5. for循环中i--的妙用 及 两变量互换数值的问题

    int[] array = new int[4]; for(int i = 0; i < array.length; i++){ array[i] = (int)(Math.random() * ...

  6. 汽车遥控钥匙HCS101/HCS200/HCS201/HCS300芯片解密

    汽车遥控钥匙芯片解密ic解密型号: HCS101 | HCS200 | HCS201 | HCS201T | HCS300 | HCS300T HCS301 | HCS301T | HCS360 |  ...

  7. SpringBoot配置属性之DataSource

    https://segmentfault.com/a/1190000004316491

  8. 如何获取google地图、baidu百度地图的坐标

    google:打开google地图-->查找目的地-->右键:此位置居中-->地址栏键入javascript:void(prompt('',gApplication.getMap() ...

  9. Office 365 Licence使用情况统计

    负责采购的同事需要知道目前公司使用了多少License,但是通过O365控制台界面似乎无法直接导出License使用量的信息,于是让我帮忙从后台统计一下. $mail_text = Read-Host ...

  10. 改变spring-servlet.xml名字和默认位置

    如何我们在web.xml定义: <servlet> <servlet-name>spring</servlet-name> <servlet-class> ...