Swift指针使用(1)-UnsafePointer

基本使用

var a = 5
let a_ptr = UnsafePointer.init(&a)
print(a_ptr.pointee)

运行结果:


16460372900508.jpg

UnsafePointer是不可变指针,也就是不能改变指针指向的地址的值。pointee是只读的,不能被赋值。
如下使用是错误的,编译报错。


16460373528956.jpg

注意,传入UnsafePointer的初始化的值用var修饰

在结构体中使用

struct Person {
    var name: String
    var age: Int
}

var person = Person.init(name: "xiaoli", age: 18)
let person_ptr = UnsafePointer.init(&person)
print(person_ptr.pointee)

运行结果:


16460375923103.jpg

在类中使用

在类中的使用和结构体完全相同.

class Person {
    var name: String
    var age: Int
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}

var person = Person.init(name: "xiaoli", age: 18)
let person_ptr = UnsafePointer.init(&person)
person_ptr.pointee.age = 20
print(person_ptr.pointee.age)

不能够改变pointee, 但是类是引用类型,可以改变它的属性
运行结果


16460380986865.jpg

枚举、 泛型 和结构体使用一样

enum RequestResult {
    case success
    case failure
}

var r = RequestResult.success
let r_ptr = UnsafePointer.init(&r)
print(r_ptr.pointee)

struct Animal {
    var rawData: T
    func canMove() {
        print("can move!")
    }
}

var ani = Animal.init(rawData: 15)
let ani_ptr = UnsafePointer.init(&ani)
print(ani_ptr.pointee.canMove())

运行结果


16460393596532.jpg

你可能感兴趣的:(Swift指针使用(1)-UnsafePointer)