Swift 獲取類的所有子類和屬性列表

2021-08-29 03:02:22 字數 1510 閱讀 3259

import foundation

/// 如果需要用對應的型別,字典定義dictionary,對應value為int8.self、int16.self,下面用到的方法都需要更改為dictionarylet valuetypesmap: dictionary= [

"c" : "int8",

"s" : "int16",

"i" : "int32",

"q" : "int", //also: int64, nsinteger, only true on 64 bit platforms

"s" : "uint16",

"i" : "uint32",

"q" : "uint", //also uint64, only true on 64 bit platforms

"b" : "bool",

"d" : "double",

"f" : "float",

"//返回的類會帶module名,如果把module名擷取了,就無法轉換成對應的類了

let classname: nsstring = nsstringfromclass(someclass) as nsstring

}return result

}/// 獲取屬性名和型別列表

////// - returns: 屬性名和型別的字典

class func getproperties() -> dictionary?

var types: dictionary= [:]

for i in 0..string?

return name as string

}/// attributes對應的型別

////// - parameter attributes: attributes

/// - returns: 型別名

private class func valuetype(withattributes attributes: string) -> string?

return type

}/// 獲取屬性型別

////// - parameter property: 屬性物件

/// - returns: 屬性型別

private class func gettypeof(property: objc_property_t) -> string?

let attributes = attributesasnsstring as string

let slices = attributes.components(separatedby: "\"")

guard slices.count > 1 else

let objectclassname = slices[1]

return objectclassname

}}@objcmembers//必須有這一句,否則無法獲取該類的所有屬性列表

class person: nsobject

p.s:只能獲取公有屬性

獲取類的所有子類

開發過程中,有時需要獲取某個包下的所有類,或者基於指定規則獲取類清單。比較常見的解決方案是自己遍歷目錄,查詢所有.class檔案。下面這個方法使用spring工具類實現,簡化過程,不再需要自己遍歷目錄 獲取在指定包下某個class的所有非抽象子類 param parentclass 父類 param...

從基類中獲取所有子類名

有的時候,我們需要獲取某個基類中的所有子類,從而進行統一管理。這裡有乙個簡單易行的實現 class program static bool issubclassof type type,type basetype b b.basetype return false public class base...

IOS 獲取父類的所有子類 全域性替換類方法

1 獲取父類的所有子類 void getsubclass free classes 2 在新增頁面統計等時,直接在父類實現新增方法,但是要讀到子類的類名 比如在父類中新增友盟頁面統計 3 如果要實現新增統計跟蹤等,除了在基類實現,還可以通過method swizzling來實現 首先建個uiview...