Swift - 属性

作者: aven_kang | 来源:发表于2022-03-15 14:11 被阅读0次
struct Circle {

        var radius:Double. // 存储属性
        var diameter: Double {.  // 计算属性
            set {
                radius = newValue/2
            }
            get {
                 radius*2
            }
        }
    }
截屏2022-02-19 下午2.44.10.png
struct Point {
        
        var x:Int
        var y:Int {
            get {
              return 10
            }
        }
    }
上述代码中,y只设置了get方法,其实相当于只读属性,就行写操作的时候,是会报错的 截屏2022-02-19 下午2.51.33.png 截屏2022-02-19 下午2.53.27.png

示例

enum Season:Int {
        case spring = 1,summer,autmn,winter
        
        var rawValue: Int {
            get {
                switch self {
                case .spring:
                    return 1
                case .summer:
                    return 2
                case .autmn:
                    return 3
                case .winter:
                    return 4
                }
            }
        }
    }

在枚举中,有rawValue,在正常的使用中

var season = Season.summer
 print(season.rawValue)

可以看出是正常调用的,但是我们可以对枚举的这个rawValue进行重写,其实更像一种计算属性,在上图上图中可以看出,我们定义了一个get方法,正常调用season.rawValue也是没问题的

枚举rawValue原理

截屏2022-02-19 下午3.06.45.png

延迟存储属性

截屏2022-02-19 下午3.31.38.png 截屏2022-02-19 下午3.33.19.png

属性观察器

willSet,didSet只用在存储属性上,willSet,didSet与set,get方法是不能共存的,也没必要共存
struct Circle {
        var radius:Double {
            willSet {
                print("willset",newValue)
            }
            
            didSet {
                print("didset",oldValue,radius)
            }
        }
        var diameter: Double {
            set {
                radius = newValue/2
            }
            get {
                 radius*2
            }
        }
    }
截屏2022-02-19 下午3.41.27.png
截屏2022-02-19 下午3.48.31.png

属性观察器、计算属性的功能,同样可以应用在全局变量、局部变量上

截屏2022-02-19 下午3.52.22.png

inout的本质总结

截屏2022-02-19 下午4.19.43.png

类属性

struc Shape {
  var width:int = 0
  static var height:Int = 0
}

Shape.height = 10 // 类属性,加入static描述的话,可以通过类来访问

截屏2022-02-19 下午4.31.08.png

单例模式

public class FileManger {
    public static let shared = FileManger()
    private init() { }
}// 第一种写法

public class FileManger {
    public static let shared = {
        return FileManger()
}()
    private init() { }
} // 第二种写法

相关文章

  • Swift笔记(一)属性、析构、调用OC单例

    目录 swift属性存储属性懒加载属性计算属性属性监听类型属性 swift析构函数 swift调用OC单例类方法 ...

  • Swift 属性

    Swift 属性 在Swift中属性主要分为存储属性、计算属性、延迟存储属性、类型属性这四种,并且Swift还提供...

  • Swift进阶(三)--- 属性

    Swift的属性 在swift中,属性主要分为以下几种: 存储属性 计算属性 延迟存储属性 类型属性 一:存储属性...

  • 浅谈 Swift 中的属性(Property)

    Properties in Swift 前言 Swift 中的属性分为存储属性与计算属性,存储属性即为我们平时常用...

  • Swift:基础(二十)属性

    Swift 属性 Swift 属性将值跟特定的类、结构或枚举关联。 属性可分为存储属性和计算属性: 存储属性和计算...

  • SwiftProperty Swift3.0 属性

    Swift Peoperty Swift中有下列几种属性存储属性(Stored properties):存储实例的...

  • OC的@property与Swift的存储属性/计算属性类比

    Swift中的计算属性/存储属性与OC中的@property   Swift中引入了存储属性、计算属性的概念,存储...

  • Swift 学习笔记(三)

    Swift属性 Swift属性将值跟特定的类,结构体,枚举关联。分为存储属性和计算属性,通常用于特定类型的实例。属...

  • Swift学习-进阶02

    swift对象本质,一个swift的对象默认占用16字节大小,在内存中的结构: swift类结构: 属性 存储属性...

  • Swift5.x- 方法(中文文档)

    引言 继续学习Swift文档,从上一章节:属性,我们学习了Swift属性相关的内容,如存储属性和计算属性set和g...

网友评论

    本文标题:Swift - 属性

    本文链接:https://www.haomeiwen.com/subject/sqkplrtx.html