Swift 实践:属性

Posted iOS程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift 实践:属性相关的知识,希望对你有一定的参考价值。

 存储属性、计算属性


存储属性:会存储常量或变量作为实例的一部分,只能由类和结构体定义。存储在实例的内存中。


计算属性:会计算值(而非存储),可以由类、结构体和枚举定义。本质就是方法、不占用实例的内存



 lazy 属性 


类似我们在 OC 里经常写的懒加载。有以下两点需要注意:

  • lazy只能修饰var变量;必须有一个初始化的值

  • 必须有一个初始化的值

struct TestStuct { lazy var para1 = [String]()  var para2: Int = 0}
class Test { lazy var label : UILabel = { let l = UILable() return l }()}



 属性观察者 

var totalSteps: Int = 0 { willSet(newTotalSteps) { //  print("About to set totalSteps to \(newTotalSteps)") } didSet { // 会在一个新值被存储后被调用。 if totalSteps > oldValue { print("Added \(totalSteps - oldValue) steps") } }}



 只读属性 

var pagetype: ChatPageType = .wenzhenvar isWz: Bool { // 只读属性 get { if self.pagetype == .wenzhen { return true } else { return false } }}



 类型属性 

类型属性只能通过类型访问。

  • 存储类型属性:整个程序运行过程中,只有1分内存(类似全局变量)

  • 计算类型属性

struct Car { static var count: Int = 0 // 结构体使用static定义类型属性,类使用class init() { Car.count += 1 }}


以上是关于Swift 实践:属性的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 在 Swift 中获取集合的异步属性的最佳实践

swift 代码片段

如何将这个 Objective-C 代码片段写入 Swift?

如何使用 Swift 使用此代码片段为 iOS 应用程序初始化 SDK?

如何向子视图属性 Swift 添加操作? [复制]

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题