Swift-enum

2021-03-12 10:53:38 浏览数 (1)

嵌套枚举

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"

}

}

}

0 人点赞