**Case1: **
typedef enum : NSUInteger {
XXXX1,
} XXXX;
let vv : XXXX = XXXX1
Case2:
typedef NS_ENUM(NSUInteger, JapaneseFoodType1) {
JapaneseFoodType1_Sushi = 1,
JapaneseFoodType1_Tempura = 2,
};
let v : JapaneseFoodType1 = .sushi
PS:也都可以用 init(rawValue:) 来使用,但不推荐。
//OC传指针给Swift
//Swift端
@objc
class SwiftClosure : NSObject {
@objc class func test1(_ ptr: UnsafeMutablePointer<Int>) {
ptr.pointee += 10
}
}
//OC端
NSInteger b = 4;
[SwiftClosure test1:&b]; //b 为 14
//Swift传指针给OC
//Swift端
var intV = 4
var intVP = withUnsafeMutablePointer(to: &intV) {
$0
}
ClassForSwift1.myPointer(intVP) //intV 为 8
//OC端
+ (void)myPointer:(NSInteger *) intP {
*intP += 4;
}
//分配内存,创建指针,类型是 UnsafeMutableRawPointer
let p = malloc(50)
//另一个指针指向 offset 16的位置
let anotherPointer = p! + 16 //或者用 p!.advanced(by: 16)
//写入数据到指定位置
p?.storeBytes(of: 55, toByteOffset: 16, as: Int.self)
//获取内存制定位置的值
var p1 : Int = p!.load(fromByteOffset: 0, as: Int.self)
//销毁内存
free(p)
//创建 大小为3个Int的内存指针
var ptr = UnsafeMutablePointer<Int>.allocate(capacity: 3)
// 先初始化内存
ptr.initialize(to: 11)
// ptr.successor表示下一个Int,也就是跳一个类型字节大小
ptr.successor().initialize(to: 22)
ptr.successor().successor().initialize(to: 33)
print(ptr.pointee) // 11
// ptr + 1,意味着跳过一个Int类型大小的字节数
print((ptr + 1).pointee) // 22
print((ptr + 2).pointee) // 33
// 释放要调用反初始化,调用了几个就释放几个
ptr.deinitialize(count: 3)
ptr.deallocate()
//RawPointer 和 Pointer之间的转换
let convertedIntP : UnsafeMutablePointer<Int> = p!.assumingMemoryBound(to: Int.self)
let convertedIntP2 : UnsafePointer<Int> = unsafeBitCast(p!, to: UnsafePointer<Int>.self)