前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swift-enum

Swift-enum

原创
作者头像
Wilbur-L
修改2021-03-12 10:53:38
1K0
修改2021-03-12 10:53:38
举报
文章被收录于专栏:iOS底层原理iOS底层原理

嵌套枚举

enum List<T>{

case end

indirect case node(T,next: List<T>)

}

当前List大小取绝最大关联值枚举的大小 T和next

T在我们传泛型参数可以确定,但是next呢?

indirect 做了些什么事情?

在sil文档里面可以看到一句英文注释

Allocates a reference-counted @box on the heap large enough to hold a value of type T

sil-instruction ::= 'alloc'_box

%1 = alloc_box $T

既然要在堆上分配内存,必然会调用swift_allocObject

那么indirect的作用就是告诉编译器当前枚举是递归,在堆区分配内存

OC混编

@objc enum Link: Int{

case num1

case num2

}

类型是强类型引用

这是Swift枚举在OC中调用的方放

反过来呢?

Swift 混编

NS_ENUM(NSInterger, OCENUM){

value1

value2

};

在编译阶段会自动转换成

public enum OCENUM : Int{

case value1=0

case value2=1

}

如果是typedef

typedef enum{

Num1,

Num2,

}OCNum;

直接查看转换过后的文件.h

public struct OCnum :Equatable,RawRepresentable{

public init(_ rawValue:UInt32)

public init(rawValue: UInt32)

public var rawValue: UInt32

}

如何在OC里面访问枚举类型的String?

class Link{

@objc enum link:Int{

case n1

case n2

case n3

var string:String{

return Link.getName(self)

}

}

class func getName(fieldName:Link) ->String{

switch self{

case .n1: return "string 1"

case .n1: return "string 1"

case .n1: return "string 1"

}

}

}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 嵌套枚举
  • OC混编
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com