當前位置:成語大全網 - 書法字典 - 反射反射和鏡像

反射反射和鏡像

/*反射鏡像Java中的反射反射和反射反射是壹種在運行時檢測、訪問或修改類型行為的特性。壹般來說,靜態語言類型的結構和方法的調用都是在編譯時決定的。開發者能做的就是用控制流(if,switch)來決定做什麽設置或者調用哪個方法。反射特性允許我們在再次運行時通過壹定的條件實時調用方法,甚至可以在某類動態設置中添加屬性和方法,只使用非常靈活和強大的語言特性。“反射”這個詞在Object-C中並不經常被提及,因為Object-C的運行時比壹般的反射更加靈活和強大。比如NSClassFromString,@ Selector("方法名")SWIFT拋棄了Object-C的運行時部分,功能弱了很多。但是,也有反射相關的內容。現在隱式轉換必須使用'文字轉換'的方式來Mirror */struct persistence { let name:string let Age:int } let Xiaoming = persistence(name:" Xiaoming ",Age: 16)// r是鏡像類型,Mirror for perssion let r = Mirror(reflecting:Xiaoming)print(" Xiaoming is \(r . display style)")//" Xiao是可選的(struct)"print("屬性個數:\ (R. children。count)")for child in r . children { print(" Attribute name:\(child . label),value:\(child . value)")/*屬性個數:2屬性名稱:Optional("name "),value: XiaoMing屬性名稱:Optional("age "),value:16 */* Mirror初始化的結果中包含的元素的描述都分組在Children屬性下,該屬性是Children的集合。public type alias Child =(label:String?,value: any)公共類型別名children = anycollection需要註意的是

該值可以是由多個元素組成的嵌套驅動。例如,如果屬性值是數組或字典,則它是嵌套形式。

對於從物體反射的鏡子,它包含完整的信息。也就是說我們可以在運行時通過鏡像的方式來學習Swift類型的壹個實例的屬性信息(也可以使用NSObject類)。

應用程序1:

任何模型對象都會生成相應的json描述。可以先訪問等待深度處理的鏡像值,根據屬性的valueType將它們分類成不同的格式。

應用2:

將valueForKey:的值設為swift對象的Object-C。只需將獲得的屬性的名稱與我們首先需要獲得的鍵值進行比較。

*/

func valueFromA(_ object: Any,key:String)-& gt;有嗎?{

讓鏡子=鏡子(反射:對象)

給鏡子裏的孩子。孩子{

let (targetKey,targetMirror) = (child.label,child.value)

if key == targetKey {

返回目標鏡像

}

}

返回零

}

//測試

如果讓name = valueFromA(小明,鍵:“name”)作為?字符串{

Print("按鍵獲取值:\(名稱)")

}

/*

需要註意的是,Mirror目前並不穩定,避免將其應用到實際開發中。

*/