iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0
自我挑戰組

自己的 Leak, 自己抓(swift)系列 第 16

判斷變數是 struct

  • 分享至 

  • xImage
  •  

判斷變數是否是 struct 的方式

基本上離不開 USR


取得 USR

我們一樣還是透過 CursorInfo 查詢 a 的資訊

let a = 1
print(a)

這邊我們可以取得兩個我們想關注的屬性

  • typeusr
  • typename
▿ 0 : 2 elements
- key : "key.typeusr"
- value : "$sSiD"
▿ 5 : 2 elements
- key : "key.typename"
- value : "Int"

swift demangle

我們透過 demangleusr 還原成 Int



USR

A Unified Symbol Resolution (USR) is a string that identifies a particular
entity (function, class, variable, etc.) within a program. USRs can be
compared across translation units to determine, e.g., when references in
one translation refer to an entity defined in another translation unit.

1. Mangling

透過解析 USR 來判斷是否是 struct

2. IndexstoreDB

USR 當作搜尋條件查詢

IndexSymbolKind

public enum IndexSymbolKind: Hashable {
  case unknown
  case module
  case namespace
  case namespaceAlias
  case macro
  case `enum`
  case `struct`
  case `class`
  case `protocol`
  case `extension`
  case union
  case `typealias`
  case function
  case variable
  case field
  case enumConstant
  case instanceMethod
  case classMethod
  case staticMethod
  case instanceProperty
  case classProperty
  case staticProperty
  case constructor
  case destructor
  case conversionFunction
  case parameter
  case using
  case concept
  case commentTag
}

上一篇
改造 SourceKitten 參數
下一篇
判斷變數是 weak?
系列文
自己的 Leak, 自己抓(swift)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言