自学swift想到一个遇循环引用问题

自学swift,想到一个循环引用的问题,如果创建一个结构体,和一个类,相互引用着对方,如下:

struct StructObj {
    var classObj: ClassObj?
}

class ClassObj {
    var structObj: StructObj?
    deinit {print("ClassObj deinit")}
}

func test() {
    print("start")
    
    var structObj: StructObj? = StructObj.init() //Struct
    var classObj: ClassObj? = ClassObj.init()    //Class
    
    // structObj不释放
    structObj!.classObj = classObj
    classObj!.structObj = structObj
//-----------------
    // classObj会释放
//    classObj!.structObj = structObj
//    structObj!.classObj = classObj
    
    print("end")
}

test()

在运行这2句代码时

    struct Obj!.classObj = classObj
    classObj!.structObj = structObj

相互引用着,导致类classObj无法释放,但是如果这2句代码交换位置:

    classObj!.structObj = structObj    
    struct Obj!.classObj = classObj

此时能释放classObj
分析不出这其中的原因,请达老帮忙解答一下!

可以使用弱引用或无主引用

class ClassObj {
    weak var structObj: StructObj?
    deinit { print("ClassObj deinit") }
}