Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct OpaqueExistentialContainer {
- var fixedSizeBuffer0: UInt
- var fixedSizeBuffer1: UInt
- var fixedSizeBuffer2: UInt
- var metadata: UnsafeRawPointer
- var witnessTable: UnsafeRawPointer
- }
- protocol P {}
- extension P {
- func test() -> String { return "TEST" }
- }
- struct A : P {
- var v1: Int64
- var v2: Int64
- }
- let pa = A(v1: 1, v2: 2) as P
- let containerPA = unsafeBitCast(pa, to: OpaqueExistentialContainer.self)
- containerPA.fixedSizeBuffer0 // 1(おそらく v1 の値)
- containerPA.fixedSizeBuffer1 // 2(おそらく v2 の値)
- containerPA.fixedSizeBuffer2 // 不定(おそらく未使用)
- unsafeBitCast(containerPA.metadata, to: Any.Type.self) // A.Type(復元できたはず)
- containerPA.witnessTable.debugDescription // 0x000000010e17ebc0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement