स्विफ्ट भाषा NSClassFromString


83

स्विफ्ट भाषा में प्रतिबिंब कैसे प्राप्त करें ?

मैं किसी क्लास को कैसे इंस्टेंट कर सकता हूं

[[NSClassFromString(@"Foo") alloc] init];

1
इस तरह का प्रयास करें, यदि कार्यान्वयन करें: NSObject.Type = NSClassFromString (className) के रूप में? NSObject.Type {ImplementationClass.init ()}
पुष्पा राजा

जवाबों:


37

कम हैसी समाधान यहाँ: https://stackoverflow.com/a/32265287/308315

ध्यान दें कि स्विफ्ट कक्षाओं को "MyViewController" के बजाय अब नाम दिया गया है, यह "AppName.MyViewController" होगा


XCode6- बीटा 6/7 के बाद से पदावनत

XCode6-beta 3 का उपयोग कर विकसित समाधान

एडविन वर्मियर के उत्तर के लिए धन्यवाद कि मैं स्विफ्ट कक्षाओं को ओब्ज-सी वर्ग में ऐसा करने के लिए कुछ बनाने में सक्षम था:

// swift file
// extend the NSObject class
extension NSObject {
    // create a static method to get a swift class for a string name
    class func swiftClassFromString(className: String) -> AnyClass! {
        // get the project name
        if  var appName: String? = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleName") as String? {
            // generate the full name of your class (take a look into your "YourProject-swift.h" file)
            let classStringName = "_TtC\(appName!.utf16count)\(appName)\(countElements(className))\(className)"
            // return the class!
            return NSClassFromString(classStringName)
        }
        return nil;
    }
}

// obj-c file
#import "YourProject-Swift.h"

- (void)aMethod {
    Class class = NSClassFromString(key);
    if (!class)
        class = [NSObject swiftClassFromString:(key)];
    // do something with the class
}

संपादित करें

आप इसे शुद्ध ओब्ज-सी में भी कर सकते हैं:

- (Class)swiftClassFromString:(NSString *)className {
    NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"];
    NSString *classStringName = [NSString stringWithFormat:@"_TtC%d%@%d%@", appName.length, appName, className.length, className];
    return NSClassFromString(classStringName);
}

मुझे आशा है कि यह किसी की मदद करेगा!


2
बीटा 7 से शुरू होने से यह अब काम नहीं करेगा। NSStringFromClass अब बस आपके बंडल नाम और क्लासनाम को एक डॉट द्वारा अलग कर देगा। तो आप कोड का उपयोग कर सकते हैं जैसे: var appName: String = NSBundle.mainBundle ()। ObjectForInfoDictionaryKey ("CFBundleName") स्ट्रिंग के रूप में? जाने classStringName: String = NSStringFromClass (theObject.dynamicType) वापसी classStringName.stringByReplacingOccurrencesOfString (appName +, withString: "", विकल्प: NSStringCompareOptions.CaseInsensitiveSearch, सीमा: "।" नहीं के बराबर)
एडविन Vermeer

@ केविनडेलॉर्ड मैंने अपने कोड में आपकी तकनीक का उपयोग किया है। लेकिन ऐपनाम वेरिएबल सही वैल्यू नहीं लौटाता है जब ऐप में उसके नाम का स्पेस होता है। इसे कैसे ठीक किया जाये, कोई विचार ? "App_Name" के बजाय "App नाम" से बाहर निकलें
Loadex

CountElements फ़ंक्शन नहीं मिल रहा है। इस पर कोई मदद?
C0D3

इसके बजाय ClassStringName के लिए इसका उपयोग करें: classStringName = "_TtC (appName .characters.count) (appName) (className.characters.count) (className)"
CND3

@Ladex, यह काम नहीं करता है यदि आपके निष्पादन योग्य नाम में जगह है। आपको अंडरस्कोर के साथ रिक्त स्थान को भी बदलने की आवश्यकता है। इसमें (कुछ भ्रमित करने वाला) ब्लॉग पोस्ट: मध्यम.com/@maximbilan/… का सुझाव दिया गया था। पोस्ट में कोड ने काम किया, लेकिन वास्तविक पोस्ट में ऐपनाम और लक्ष्य नाम का उपयोग करने के बारे में बात की गई थी जो उनके कोड से अलग था।
stuckj

57

आपको @objc(SwiftClassName)अपनी स्विफ्ट क्लास के ऊपर रखना होगा ।
पसंद:

@objc(SubClass)
class SubClass: SuperClass {...}

2
NSClassFromString()फ़ंक्शन को @objcएट्रिब्यूशन द्वारा निर्दिष्ट नाम की आवश्यकता होती है ।
eonil

1
कमाल है, मेरी मानसिक भलाई पर इतने बड़े प्रभाव के साथ इतनी छोटी सी बात!
एड्रियन_एच

किसी को उनके वर्ग नाम के ऊपर @objc करने के बाद NSClassFromString () का उपयोग करने का तरीका दिखा सकते हैं। मैं बस AnyClass मिलता है! लौटा
रयान बोब्रोस्की

इससे मेरा काम बनता है। लेकिन मेरे पास एक सवाल है कि क्यों @objc(SubClass)काम करता है, लेकिन @objc class SubClassनहीं?
pyanfield

स्विफ्ट डॉक से @pyanfield: "objc विशेषता वैकल्पिक रूप से एक एकल विशेषता तर्क को स्वीकार करती है, जिसमें एक पहचानकर्ता होता है। पहचानकर्ता उस ऑब्जेक्ट के लिए उद्देश्य-सी के संपर्क में आने के लिए नाम निर्दिष्ट करता है जो objc लागू होता है।" तो, अंतर यह है कि हमारे स्विफ्ट उपवर्ग को यह नाम कैसे मिलता है यह उद्देश्य सी के लिए दिखाई देगा। @objc class SubClassनाम में निहित है कि सबक्लास नाम के समान है। और @objc(SubClass) class SubClassसीधे रूप में यह निर्दिष्ट किया गया है। मुझे लगता है कि कंपाइलर किसी कारण से पहले फॉर्म में ही इसका पता नहीं लगा सकता है।
वॉइगर

56

यह वह तरीका है जिससे मैं वर्ग नाम से यूआईवीवाईकंट्रोलर को प्राप्त करता हूं

var className = "YourAppName.TestViewController"
let aClass = NSClassFromString(className) as! UIViewController.Type
let viewController = aClass()

अधिक जानकारी यहाँ है

IOS 9 में

var className = "YourAppName.TestViewController"
let aClass = NSClassFromString(className) as! UIViewController.Type
let viewController = aClass.init()

11
यदि ऐप का नाम "-" है, तो इसे "_" से बदल दिया जाना चाहिए
जिताओ जिओनग

@RigelChen अच्छा समाधान धन्यवाद लेकिन अगर हमें केवल टाइप (TestViewController) की आवश्यकता है और हर बार इसे शुरू नहीं करना है तो हमें क्या करना चाहिए?
ArgaPK

@RyanHeitner अच्छा समाधान धन्यवाद लेकिन अगर हमें केवल टाइप (TestViewController) की आवश्यकता है और हर बार इसे शुरू नहीं करना है तो हमें क्या करना चाहिए?
अरग्पक

@argap एक सिंगलटन बनाएं, और इसे एक्सेस करें: viewController = aClass.saringInstance ()
mahboudz

27

अद्यतन: बीटा 6 के साथ शुरू NSStringFromClass एक डॉट द्वारा अलग किए गए आपके बंडल नाम और वर्ग का नाम वापस कर देगा। तो यह कुछ-कुछ MyApp.MyClass जैसा होगा

स्विफ्ट कक्षाओं में एक निर्मित आंतरिक नाम होगा जो निम्नलिखित भागों से बना है:

  • यह _TtC से शुरू होगा,
  • एक नंबर के बाद आपके आवेदन नाम की लंबाई है,
  • आपके आवेदन नाम के बाद,
  • आपके वर्ग नाम की लंबाई के आधार पर एक संख्या,
  • आपके वर्ग नाम के बाद।

तो आपका क्लास का नाम कुछ इस तरह होगा _TtC5MyApp7MyClass

आप इस नाम को एक स्ट्रिंग के रूप में निष्पादित करके प्राप्त कर सकते हैं:

var classString = NSStringFromClass(self.dynamicType)

अद्यतन स्विफ्ट 3 में यह बदल गया है:

var classString = NSStringFromClass(type(of: self))

उस स्ट्रिंग का उपयोग करके, आप निष्पादित करके अपने स्विफ्ट वर्ग का एक उदाहरण बना सकते हैं:

var anyobjectype : AnyObject.Type = NSClassFromString(classString)
var nsobjectype : NSObject.Type = anyobjectype as NSObject.Type
var rec: AnyObject = nsobjectype()

यह केवल NSObject वर्गों के लिए काम करेगा, जो स्विफ्ट कक्षाओं के बारे में है। डिफ़ॉल्ट रूप से उनके पास कोई इनहिट मेथोड नहीं है और प्रोटोकॉल के लिए टाइपकास्ट काम नहीं कर रहा है, कोई विचार?
Stephan

स्विफ्ट 1.2 / XCode 6.3.1 क्रैश इस मामले में इस निर्माण के साथ
स्टीफन

मैंने NSCoding, Printable, Hashable, Equatable और JSON github.com/evermeer/EVReflection के
एडविन

उल्लिखित समस्या स्विफ्ट 2.0 में तय की गई है ... मेरा उत्तर देखें क्योंकि आपको आईआईटी बुलाना है .... बस nsobjectype () किसी भी अधिक सही नहीं है।
Stephan

1
Let क्लासस्ट्रिंग = NSStringFromClass (प्रकार (स्वयं का)))
अभिषेक थपलियाल

11

यह लगभग समान है

func NSClassFromString(_ aClassName: String!) -> AnyClass!

इस डॉक्टर की जाँच करें:

https://developer.apple.com/library/prerelease/ios/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/#//apple_ref/c/func/NSClassFromString


5
यह कार्य केवल NSClassकक्षाओं के साथ काम करता है , स्विफ्ट कक्षाओं के साथ नहीं। NSClassFromString("String")लौटता है nil, लेकिन NSClassFromString("NSString")नहीं।
Cezary Wojcik

मैं कंप्यूटर के सामने नहीं हूँ ... लेकिन आप इसके साथ कोशिश कर सकते हैं: var myVar:NSClassFromString("myClassName")
gabuh

2
@CezaryWojcik: ps Stringएक वर्ग नहीं है; यह एक संरचना है
newacct

2
@newacct D'oh, आप सही कह रहे हैं, मेरा बुरा। लेकिन किसी भी तरह सभी स्विफ्ट कक्षाओं के लिए NSClassFromStringरिटर्न nil
Cezary Wojcik

यदि एक वर्ग @objc एनोटेट किया गया है या NSObject से विरासत में मिला है, तो यह ऑब्जेक्टिव-सी ऑब्जेक्ट सिस्टम का उपयोग करता है और NSClassFromString, विधि स्विज़लिंग, आदि में भाग लेता है, हालांकि, यदि ऐसा नहीं होता है, तो क्लास आपके स्विफ्ट कोड और doesn में आंतरिक है। 'उसी वस्तु प्रणाली का उपयोग नहीं करते। इसका पूरी तरह से वर्णन नहीं किया गया है, लेकिन स्विफ्ट का ऑब्जेक्ट सिस्टम ऑब्जेक्टिव-सी की तुलना में कम देर से बँधा हुआ है।
बिल

9

मैं गतिशील रूप से किसी वस्तु को त्वरित करने में सक्षम था

var clazz: NSObject.Type = TestObject.self
var instance : NSObject = clazz()

if let testObject = instance as? TestObject {
    println("yes!")
}

मैं बनाने के लिए एक तरह से नहीं मिला है AnyClassएक से String(Obj सी का उपयोग किए बिना)। मुझे लगता है कि वे आपको ऐसा नहीं करना चाहते क्योंकि यह मूल रूप से टाइप सिस्टम को तोड़ता है।


1
मुझे लगता है कि यह जवाब, जबकि NSClassFromString के बारे में नहीं है, गतिशील वस्तु आरंभीकरण करने के लिए स्विफ्ट-केंद्रित तरीका देने के लिए यहां सबसे अच्छा है। साझा करने के लिए धन्यवाद!
मैट लॉन्ग

@Sulthan और मैट के साथ-साथ यह उजागर करने के लिए धन्यवाद कि यह प्रतिक्रिया शीर्ष पर क्यों होनी चाहिए!
इलियास करीम

7

स्विफ्ट 2 के लिए, मैंने इसे और अधिक तेज़ी से करने के लिए एक बहुत ही सरल एक्सटेंशन बनाया https://github.com/damienromito/NSObject-FromClassName

extension NSObject {
    class func fromClassName(className : String) -> NSObject {
        let className = NSBundle.mainBundle().infoDictionary!["CFBundleName"] as! String + "." + className
        let aClass = NSClassFromString(className) as! UIViewController.Type
        return aClass.init()
    }
}

मेरे मामले में, मैं यह देखना चाहता हूँ कि मुझे क्या चाहिए

override func viewDidLoad() {
    super.viewDidLoad()
    let controllers = ["SettingsViewController", "ProfileViewController", "PlayerViewController"]
    self.presentController(controllers.firstObject as! String)

}

func presentController(controllerName : String){
    let nav = UINavigationController(rootViewController: NSObject.fromClassName(controllerName) as! UIViewController )
    nav.navigationBar.translucent = false
    self.navigationController?.presentViewController(nav, animated: true, completion: nil)
}

6

इससे आपको उस क्लास का नाम मिल जाएगा, जिसे आप इंस्टेंट करना चाहते हैं। तब आप एडविंस उत्तर का उपयोग कर सकते हैं अपनी कक्षा की एक नई वस्तु को का ।

बीटा 6 के रूप में _stdlib_getTypeNameएक चर का नामांकित प्रकार प्राप्त होता है। इसे एक खाली खेल के मैदान में चिपकाएँ:

import Foundation

class PureSwiftClass {
}

var myvar0 = NSString() // Objective-C class
var myvar1 = PureSwiftClass()
var myvar2 = 42
var myvar3 = "Hans"

println( "TypeName0 = \(_stdlib_getTypeName(myvar0))")
println( "TypeName1 = \(_stdlib_getTypeName(myvar1))")
println( "TypeName2 = \(_stdlib_getTypeName(myvar2))")
println( "TypeName3 = \(_stdlib_getTypeName(myvar3))")

आउटपुट है:

TypeName0 = NSString
TypeName1 = _TtC13__lldb_expr_014PureSwiftClass
TypeName2 = _TtSi
TypeName3 = _TtSS

इवान स्विक की ब्लॉग प्रविष्टि इन तारों को समझने में मदद करती है: http://www.eswick.com/2014/06/inside-swift/

उदाहरण _TtSiके लिए स्विफ्ट का आंतरिक Intप्रकार है।


"तब आप अपनी कक्षा की एक नई वस्तु को तुरंत लिखने के लिए एडविंस उत्तर का उपयोग कर सकते हैं।" मुझे नहीं लगता कि रेफरी। PureSwiftClass के लिए उत्तर कार्य। उदाहरण के लिए डिफ़ॉल्ट रूप से इस वर्ग में कोई init विधि नहीं है
Stephan

6

स्विफ्ट 2.0 में (एक्सकोड 7.01 में परीक्षण) _20150930

let vcName =  "HomeTableViewController"
let ns = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as! String

// Convert string to class
let anyobjecType: AnyObject.Type = NSClassFromString(ns + "." + vcName)!
if anyobjecType is UIViewController.Type {
// vc is instance
    let vc = (anyobjecType as! UIViewController.Type).init()
    print(vc)
}

5

xcode 7 बीटा 5:

class MyClass {
    required init() { print("Hi!") }
}
if let classObject = NSClassFromString("YOURAPPNAME.MyClass") as? MyClass.Type {
    let object = classObject.init()
}

3

कक्षा से स्ट्रिंग

let classString = NSStringFromClass(TestViewController.self)

या

let classString = NSStringFromClass(TestViewController.classForCoder())

स्ट्रिंग से एक UIViewController वर्ग init:

let vcClass = NSClassFromString(classString) as! UIViewController.Type
let viewController = vcClass.init()

3

मैं स्विफ्ट 3 के लिए इस श्रेणी का उपयोग कर रहा हूं:

//
//  String+AnyClass.swift
//  Adminer
//
//  Created by Ondrej Rafaj on 14/07/2017.
//  Copyright © 2017 manGoweb UK Ltd. All rights reserved.
//

import Foundation


extension String {

    func convertToClass<T>() -> T.Type? {
        return StringClassConverter<T>.convert(string: self)
    }

}

class StringClassConverter<T> {

    static func convert(string className: String) -> T.Type? {
        guard let nameSpace = Bundle.main.infoDictionary?["CFBundleExecutable"] as? String else {
            return nil
        }
        guard let aClass: T.Type = NSClassFromString("\(nameSpace).\(className)") as? T.Type else {
            return nil
        }
        return aClass

    }

}

उपयोग होगा:

func getViewController(fromString: String) -> UIViewController? {
    guard let viewController: UIViewController.Type = "MyViewController".converToClass() else {
        return nil
    }
    return viewController.init()
}

2

मुझे लगता है कि मैं यह कहने में सही हूं कि आप कम से कम वर्तमान बीटा (2) के साथ नहीं हो सकते। उम्मीद है कि यह कुछ ऐसा है जो भविष्य के संस्करणों में बदल जाएगा।

आप NSClassFromStringएक प्रकार का चर प्राप्त करने के लिए उपयोग कर सकते हैं, AnyClassलेकिन स्विफ्ट में इसका कोई रास्ता नहीं दिखता है। आप ऑब्जेक्टिव C के पुल का उपयोग कर सकते हैं और वहां कर सकते हैं या - यदि यह आपके मामले में काम करता है - स्विच स्टेटमेंट का उपयोग करने के लिए वापस गिरें


स्विफ्ट 1.2 / XCode 6.3.1 के साथ भी यह संभव नहीं लगता है, या क्या आपने कोई समाधान खोजा है?
Stephan

2

जाहिरा तौर पर, स्विफ्ट में किसी वस्तु को तुरंत बदलना संभव नहीं है (अब) जब क्लास का नाम केवल रनटाइम पर जाना जाता है। NSObject के उपवर्गों के लिए एक उद्देश्य-सी आवरण संभव है।

कम से कम आप एक ही वर्ग के ऑब्जेक्ट को ऑब्जेक्ट-सी रैपर (xCode संस्करण 6.2 - 6C107a का उपयोग किए बिना) रनटाइम में दिए गए ऑब्जेक्ट के रूप में इंस्टेंट कर सकते हैं:

    class Test : NSObject {}
    var test1 = Test()
    var test2 = test1.dynamicType.alloc()

यह वर्ग नाम से एक उदाहरण नहीं बनाता है।
Stephan

यह आपके उत्तर से स्पष्ट नहीं है, यह शुद्ध स्विफ्ट कक्षाओं पर काम नहीं करता है, सही है?
स्टेपहान

2

स्विफ्ट 2.0 में (Xcode 7 के बीटा 2 में परीक्षण किया गया) यह इस तरह काम करता है:

protocol Init {
  init()
}

var type = NSClassFromString(className) as? Init.Type
let obj = type!.init()

निश्चित रूप से आने वाले प्रकार के लिए NSClassFromString को इस init प्रोटोकॉल को लागू करना है।

मुझे उम्मीद है कि यह स्पष्ट है, className एक स्ट्रिंग है जिसमें कक्षा का ओबज-सी रनटाइम नाम है जो डिफ़ॉल्ट रूप से "फू" नहीं है, लेकिन यह चर्चा आईएमएचओ आपके प्रश्न का प्रमुख विषय नहीं है।

आपको इस प्रोटोकॉल की आवश्यकता है क्योंकि डिफ़ॉल्ट हो सभी स्विफ्ट कक्षाएं एक initविधि को लागू नहीं करती हैं।


यदि आपके पास शुद्ध स्विफ्ट कक्षाएं हैं, तो मेरे अन्य प्रश्न देखें: stackoverflow.com/questions/30111659
Stephan

2

लगता है कि सही झुकाव होगा ...

func newForName<T:NSObject>(p:String) -> T? {
   var result:T? = nil

   if let k:AnyClass = NSClassFromString(p) {
      result = (k as! T).dynamicType.init()
   }

   return result
}

... जहां "पी" का अर्थ "पैक किया हुआ" है - एक अलग मुद्दा।

लेकिन AnyClass से T तक की महत्वपूर्ण कास्ट वर्तमान में एक संकलक दुर्घटना का कारण बनती है, इसलिए इस बीच में एक अलग क्लोजर में k का इनिशियलाइज़ेशन बस्ट करना चाहिए, जो ठीक संकलित करता है।


2

मैं विभिन्न लक्ष्यों का उपयोग करता हूं, और इस मामले में स्विफ्ट वर्ग नहीं मिला है। आपको CFBundleName को CFBundleExecutable से बदलना चाहिए। मैंने चेतावनी भी दी:

- (Class)swiftClassFromString:(NSString *)className {
    NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleExecutable"];
    NSString *classStringName = [NSString stringWithFormat:@"_TtC%lu%@%lu%@", (unsigned long)appName.length, appName, (unsigned long)className.length, className];
    return NSClassFromString(classStringName);
}

2

इस के रूप में सरल रूप में समाधान नहीं है?

// Given the app/framework/module named 'MyApp'
let className = String(reflecting: MyClass.self)

// className = "MyApp.MyClass"

3
मूल प्रश्न स्ट्रिंग से कक्षा चाहता था, कक्षा से स्ट्रिंग नहीं।
रयान

1

इसके अलावा स्विफ्ट 2.0 में (संभवतः पहले?) आप सीधे टाइप कर सकते हैं dynamicType संपत्ति के हैं

अर्थात

class User {
    required init() { // class must have an explicit required init()
    }
    var name: String = ""
}
let aUser = User()
aUser.name = "Tom"
print(aUser)
let bUser = aUser.dynamicType.init()
print(bUser)

उत्पादन

aUser: User = {
  name = "Tom"
}
bUser: User = {
  name = ""
}

मेरे उपयोग के मामले के लिए काम करता है



1

मैंने इस तरह से लागू किया है,

if let ImplementationClass: NSObject.Type = NSClassFromString(className) as? NSObject.Type{
   ImplementationClass.init()
}

1

स्विफ्ट 5 , उपयोग करने में आसान, @Ondrej Rafaj's के लिए धन्यवाद

  • सोर्स कोड:

    extension String {
         fileprivate
         func convertToClass<T>() -> T.Type? {
              return StringClassConverter<T>.convert(string: self)
         }
    
    
        var controller: UIViewController?{
              guard let viewController: UIViewController.Type = convertToClass() else {
                return nil
            }
            return viewController.init()
        }
    }
    
    class StringClassConverter<T> {
         fileprivate
         static func convert(string className: String) -> T.Type? {
             guard let nameSpace = Bundle.main.infoDictionary?["CFBundleExecutable"] as? String, let aClass = NSClassFromString("\(nameSpace).\(className)") as? T.Type else {
                 return nil
            }
             return aClass
    
       }
    
    }
    
  • इस तरह कॉल करें:

    guard let ctrl = "ViewCtrl".controller else {
        return
    }
    //  ctrl do sth
    

0

एक पृष्ठ कूद उदाहरण यहाँ दिखाया गया है, आशा आपकी मदद कर सकती है!

let vc:UIViewController = (NSClassFromString("SwiftAutoCellHeight."+type) as! UIViewController.Type).init()
self.navigationController?.pushViewController(vc, animated: true)

// Click the Table response
tableView.deselectRow(at: indexPath, animated: true)
let sectionModel = models[(indexPath as NSIndexPath).section]
var className = sectionModel.rowsTargetControlerNames[(indexPath as NSIndexPath).row]
className = "GTMRefreshDemo.\(className)"
if let cls = NSClassFromString(className) as? UIViewController.Type {
   let dvc = cls.init()
   self.navigationController?.pushViewController(dvc, animated: true)
}

0

Swift3 +

extension String {

    var `class`: AnyClass? {

        guard
            let dict = Bundle.main.infoDictionary,
            var appName = dict["CFBundleName"] as? String
            else { return nil }

        appName.replacingOccurrences(of: " ", with: "_")
        let className = appName + "." + self
        return NSClassFromString(className)
    }
}

इस कोड स्निपेट के लिए धन्यवाद, जो कुछ सीमित, तत्काल सहायता प्रदान कर सकता है। एक उचित व्याख्या यह दर्शाती है कि यह समस्या का एक अच्छा समाधान क्यों है, यह दिखाते हुए इसके दीर्घकालिक मूल्य में बहुत सुधार करेगा , और यह भविष्य के पाठकों को अन्य, समान प्रश्नों के साथ और अधिक उपयोगी बना देगा। कृपया कुछ स्पष्टीकरण जोड़ने के लिए अपने उत्तर को संपादित करें, जिसमें आपके द्वारा की गई धारणाएँ शामिल हैं।
18:03

-6

यहाँ एक अच्छा उदाहरण है:

class EPRocks { 
    @require init() { } 
}

class EPAwesome : EPRocks { 
    func awesome() -> String { return "Yes"; } 
}

var epawesome = EPAwesome.self(); 
print(epawesome.awesome);

1
यह वह नहीं है जो सवाल पूछ रहा है।
थॉमस जुएल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.