সুইফট 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)
সম্ভবত এটি কাউকে সাহায্য করে !.