5 स्विफ्ट के लिए अद्यतन
हम शुरुआती अक्षर के माध्यम से उदाहरण चर का उपयोग करके प्रकार के नामों का सुंदर विवरण प्राप्त कर सकते हैं String
और एक निश्चित वर्ग के नए ऑब्जेक्ट बना सकते हैं
जैसे, उदाहरण के लिए print(String(describing: type(of: object)))
। जहाँ object
एक उदाहरण चर हो सकता है जैसे सरणी, एक शब्दकोश Int
, ए NSDate
, आदि।
क्योंकि NSObject
अधिकांश उद्देश्य-सी श्रेणी पदानुक्रमों का मूल वर्ग है, इसलिए आप NSObject
प्रत्येक उपवर्ग के वर्ग का नाम प्राप्त करने के लिए एक विस्तार करने का प्रयास कर सकते हैं NSObject
। ऐशे ही:
extension NSObject {
var theClassName: String {
return NSStringFromClass(type(of: self))
}
}
या आप एक स्थिर कवक बना सकते हैं जिसका पैरामीटर प्रकार का है Any
(प्रोटोकॉल जिसके अनुसार सभी प्रकार स्पष्ट रूप से अनुरूप हैं) और स्ट्रिंग के रूप में वर्ग का नाम देता है। ऐशे ही:
class Utility{
class func classNameAsString(_ obj: Any) -> String {
//prints more readable results for dictionaries, arrays, Int, etc
return String(describing: type(of: obj))
}
}
अब आप ऐसा कुछ कर सकते हैं:
class ClassOne : UIViewController{ /* some code here */ }
class ClassTwo : ClassOne{ /* some code here */ }
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Get the class name as String
let dictionary: [String: CGFloat] = [:]
let array: [Int] = []
let int = 9
let numFloat: CGFloat = 3.0
let numDouble: Double = 1.0
let classOne = ClassOne()
let classTwo: ClassTwo? = ClassTwo()
let now = NSDate()
let lbl = UILabel()
print("dictionary: [String: CGFloat] = [:] -> \(Utility.classNameAsString(dictionary))")
print("array: [Int] = [] -> \(Utility.classNameAsString(array))")
print("int = 9 -> \(Utility.classNameAsString(int))")
print("numFloat: CGFloat = 3.0 -> \(Utility.classNameAsString(numFloat))")
print("numDouble: Double = 1.0 -> \(Utility.classNameAsString(numDouble))")
print("classOne = ClassOne() -> \((ClassOne).self)") //we use the Extension
if classTwo != nil {
print("classTwo: ClassTwo? = ClassTwo() -> \(Utility.classNameAsString(classTwo!))") //now we can use a Forced-Value Expression and unwrap the value
}
print("now = Date() -> \(Utility.classNameAsString(now))")
print("lbl = UILabel() -> \(String(describing: type(of: lbl)))") // we use the String initializer directly
}
}
इसके अलावा, एक बार जब हम कक्षा के नाम को स्ट्रिंग के रूप में प्राप्त कर सकते हैं, तो हम उस कक्षा की नई वस्तुओं को तुरंत निकाल सकते हैं :
// Instantiate a class from a String
print("\nInstantiate a class from a String")
let aClassName = classOne.theClassName
let aClassType = NSClassFromString(aClassName) as! NSObject.Type
let instance = aClassType.init() // we create a new object
print(String(cString: class_getName(type(of: instance))))
print(instance.self is ClassOne)
शायद यह किसी को वहाँ मदद करता है !.