2014-11-03 8 views
11

मुझे ऐपडिलेगेट से दूसरे क्लास में एक वैरिएबल पास करने की आवश्यकता है जिसे मैंने प्रोजेक्ट के वैश्विक चर रखने के लिए बनाया है और मैं इसे काम करने के लिए कोई रास्ता नहीं ढूंढ पा रहा हूं।एपडिलेगेट से दूसरे वर्ग में स्विफ्ट पासिंग डेटा

func application(application: UIApplication!, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData!) { 
    println("Device's token is: \(deviceToken)") 

    //Global Variables Class Instance 
    let globals:Globals = Globals() 

    globals.setDeviceToken("test1") //method1 not working 
    globals.deviceToken = "test2" //method2 not working 
} 

यह मेरा वैश्विक कक्षा है:

यह AppDelegate में कोड है

public class Globals { 
    var deviceToken = String() 

    init() { 
     //nothing 
    } 

    func setDeviceToken(s:String){ 
     deviceToken = s 
    } 

    func getDeviceToken() -> String { 
     return deviceToken 
    } 
} 

अगर मैं इस परियोजना के अन्य फ़ाइलों से, मूल्य मुद्रित करने के लिए प्रयास करते हैं, मैं कर रहा हूँ कुछ भी पाने में सक्षम नहीं, बस एक खाली स्ट्रिंग।

class ViewController: UIViewController { 

    //Global Variables Class Instance 
    let globals:Globals = Globals() 

    override func viewDidLoad() { 
     println(globals.getDeviceToken()) //return empty string 
     println(globals.deviceToken)  //return empty string 

*** अद्यतन: जो लोग मतदान मेरे सवाल करने के लिए: आपको बहुत बहुत धन्यवाद। क्षमा करें अगर मैं स्विफ्ट (अभी तक) का विशेषज्ञ नहीं हूं और खेद है कि अगर मैं कुछ पूछने के लिए स्टैक ओवरफ्लो का उपयोग कर रहा हूं तो मुझे नहीं पता!

let delegate = UIApplication.sharedApplication().delegate as AppDelegate 
let deviceToken = delegate.deviceToken 
  • एकमात्र में देखो:

  • +0

    ऐप प्रतिनिधि में कितना डेटा होना चाहिए? कोई नहीं! कभी! ऐसा मत करो ऐसा नहीं है कि ऐप प्रतिनिधि क्या है। – Fogmeister

    +6

    परेशान होने की कोई आवश्यकता नहीं है, मैं सिर्फ एक नौसिखिया हूं और मैं सीखने की कोशिश कर रहा हूं। @Fogmeister – MeV

    उत्तर

    14

    कई पैटर्न आप प्राप्त करने के लिए आप क्या चाहते हैं

    1. आप UIApplication के माध्यम से AppDelegate यहां पहुंच सकता है का उपयोग कर सकते हैं। 'स्विफ्ट सिंगलटन' के लिए एक त्वरित Google खोज आपको एक लंबा सफर तय करेगी। पहला परिणाम:

      class SingletonB { 
      
           class var sharedInstance : SingletonB { 
           struct Static { 
            static let instance : SingletonB = SingletonB() 
           } 
           return Static.instance 
          } 
      } 
      

    फिर sharedInstance का उपयोग कहीं भी सिंगलटन का दृष्टांत के लिए और एक ही चर का उपयोग।

    पहला वाला त्वरित और गंदा है, इसलिए अधिक गंभीर परियोजनाओं के लिए मैं सिंगलटन पैटर्न की अनुशंसा करता हूं।

    शायद यह करने के लिए एक लाख तरीके हैं, लेकिन यह आप शुरू कर दिया (इस लिंक है, जो एकमात्र लागू करने के लिए कुछ तरीके की पड़ताल में अधिक: https://github.com/hpique/SwiftSingleton)

    मिलना चाहिए

    +0

    आपके उत्तर के लिए धन्यवाद। मैंने सिंगलटन का कभी भी उपयोग नहीं किया और इसके बारे में कुछ दस्तावेज पढ़ने की जरूरत है। लेकिन कोड ग्लोबल्स के लिए उपयोग किए जाने वाले एक जैसा दिखता है।@ बॉब वोर – MeV

    +0

    सिंगलटन बस आश्चर्यजनक !!!!! धन्यवाद!!!!!! @Bob Vork – MeV

    +0

    लिंक किए गए लेख में प्रलेखित के रूप में, यदि आप स्विफ्ट 1.2 या बाद में उपयोग कर रहे हैं तो एक सिंगलटन बनाने के उपरोक्त बल्कि ठोस तरीके की आवश्यकता नहीं है। – RenniePet

    6

    मैं बस मेरी समस्या हल NSUserDefaults का उपयोग कर

    AppDelegate में

    :

    NSUserDefaults.standardUserDefaults().setObject(deviceToken, forKey: "deviceToken") 
    NSUserDefaults.standardUserDefaults().synchronize() 
    

    अन्य वर्गों से:

    NSUserDefaults.standardUserDefaults().objectForKey("deviceToken") 
    

    ईमानदारी से मैं अगर यह यह करने के लिए एक अच्छा तरीका है पता नहीं है, लेकिन यह काम कर रहा है

    *** अद्यतन: जो नीचे मेरे सवाल मतदान करने के लिए: आपको बहुत बहुत धन्यवाद। क्षमा करें अगर मैं स्विफ्ट (अभी तक) का विशेषज्ञ नहीं हूं और खेद है कि अगर मैं कुछ पूछने के लिए स्टैक ओवरफ्लो का उपयोग कर रहा हूं तो मुझे नहीं पता!

    +0

    हाय! मैं जानना चाहता हूं कि NSUserDefaults का उपयोग करने की अनुशंसा क्यों नहीं की जाती है? – mattyU

    +0

    mattyU आपको यहां @Fogmeister से पूछने की ज़रूरत है, क्योंकि उसने मेरे प्रश्न पर टिप्पणी की – MeV

    संबंधित मुद्दे