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:当懒加载属性是基于一个存储属性计算的时候,切勿使用懒加载属性,采用计算属性

 

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!
本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/6241592.html ,如需转载请自行联系原作者
相关文章
|
2月前
|
存储 Swift
Swift开发——属性检查器
Swift中的属性检查器(willSet, didSet)允许在设置存储属性值前后执行代码。在类`Circle`中,属性`radius`使用属性观察器:willSet在赋值前检查值,若值为负则打印警告;didSet在赋值后比较新旧值,根据变化输出相应信息。在实例`c`中,`radius`从-5变为0时,输出“Input value is negative.”和“The circle gets smaller.”;从0变为10时,输出“Input value is normal.”和“The circle gets larger.”。
188 4
Swift开发——属性检查器
|
2月前
|
存储 程序员 Swift
Swift开发——存储属性与计算属性
Swift推荐使用结构体进行开发,结构体支持属性和方法,且作为值类型。结构体属性包括存储属性(如radius)和计算属性(如r),计算属性不存储值,类似方法。结构体用`struct`定义,命名遵循大驼峰规则。实例名遵循小驼峰规则。属性可在结构体中任意位置定义,静态属性用`static`。存储属性可为`lazy`实现懒加载。结构体实例通过`.`访问属性和方法,静态属性和方法用`结构体名.`访问。计算属性可读写,可通过`get`和`set`定义。程序段1展示了结构体Point和Circle的属性和方法,包括私有属性、只读计算属性、可读写计算属性及`mutating`方法。
20 0
Swift开发——存储属性与计算属性
|
3月前
|
安全 Swift iOS开发
【Swift开发专栏】Swift中的属性观察者与KVO
【4月更文挑战第30天】Swift编程语言支持属性观察者(`willSet`和`didSet`)和键值观察(KVO)来响应属性变化。属性观察者在设置前(`willSet`)和设置后(`didSet`)执行代码,可用于数据绑定。KVO是Cocoa/Cocoa Touch中的机制,需`NSObject`子类和`@objc dynamic`属性配合使用。注意在观察者销毁前移除观察,以避免内存问题。示例展示了属性观察者实现简单数据绑定。
51 1
|
3月前
|
存储 算法 安全
【Swift专题】聊聊Swift中的属性
属性是面向对象语言中非常基础的语法特性,我们讲属性,实际上就是讲与类本身或类实例关联的数据。在面向对象的语言中,类作为重要的数据结构会封装数据与函数,类中的函数我们通常称其为方法,而数据则就是属性。
71 1
|
3月前
|
存储 Swift
Swift 语言:什么是闭包(Closure)?它们与函数的区别是什么?
Swift 语言:什么是闭包(Closure)?它们与函数的区别是什么?
82 1
|
3月前
|
安全 JavaScript 前端开发
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
135 0
|
10月前
|
安全 程序员 编译器
2 Swift 和 Objective-C的区别
Swift 和 Objective-C的区别
75 0
|
11月前
|
Swift
Swift中AnyObject、Any、AnyClass、T.self、T.Type、type(of:)、Self的使用和区别
Swift中AnyObject、Any、AnyClass、T.self、T.Type、type(of:)、Self的使用和区别
154 0
|
11月前
|
存储 Swift
Swift属性包装器@propertyWrapper
Swift属性包装器@propertyWrapper
99 0
|
存储 监控 Swift
Swift实用小册09:存储属性、计算属性及属性观察器的使用
Swift实用小册09:存储属性、计算属性及属性观察器的使用
244 0
Swift实用小册09:存储属性、计算属性及属性观察器的使用