嵌套枚举
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"
}
}
}