美文网首页
swift-Enum

swift-Enum

作者: 孙健会员 | 来源:发表于2023-11-29 09:39 被阅读0次
  • RawValue
enum Week: String {
    case MON, TUE, WED, THU, FRI, SAT, SUN
}

swiftc -emit-sil main.swift

sil源码:

 enum Week : String {
   case MON, TUE, WED, THU, FRI, SAT, SUN
   init?(rawValue: String)
   typealias RawValue = String
   var rawValue: String { get }
 }
实现:
print(Week(rawValue: "SUN"))
print(Week.init(rawValue: "SAT"))
print(Week(rawValue: "Hello"))
输出:
Optional(swift_Enum.Week.SUN)
Optional(swift_Enum.Week.SAT)
nil 

why?

源码展示


调用_findStringSwitchCase.png
实现_findStringSwitchCase.png
内存分布.png
bb28、bb29.png
  • 关联值
enum Shape {
    case circle(radious: Double)
    case rectangle(width:Int, height:Int)
}

sil 源码

 enum Shape {
   case circle(radious: Double)
   case rectangle(width: Int, height: Int)
 }

只有case和关联值,没有typealias取别名,没有init方法,没有rawValue计算属性

var circle = Shape.circle(radious: 20.0)
var rec = Shape.rectangle(width: 10, height: 20)

内存分布


枚举.png
内存大小.png
关联枚举.png
内存分布.png
内存分配.png

内存对齐&字节对齐

  • 内存对齐: ios 采用 8 字节,只会在对象的初始化分配内存是出现,malloc、alloc
  • 字节对齐:第一个数据成员放在 0 位置,以后每个成员存储的其实位置要从该成员大小或改成员的子成员大小(只要该成员有子成员,例如数组、结构体等)的整数倍开始。比如 Int 位 8 字节,则要从 8 的整数倍开始存储。

相关文章

  • swift-enum

    /* Swift枚举中支持以下四种关联值类型: 整型(Integer) 浮点数(Float Point) 字符串(...

  • Swift-enum

    OC Swift 原始值 Raw Values 隐式原始值 Implicitly Assigned Raw Val...

网友评论

      本文标题:swift-Enum

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