2015-06-15 8 views
5

यह मेरी समझ है कि एक्सकोड 6.3/स्विफ्ट 1.2 के रूप में, मैं कक्षा के अंदर स्थिर चर और विधियों का उपयोग कर सकता हूं। हालांकि, जब मैं एक स्थिर फ़ंक्शन को कॉल करके स्थिर चर को प्रारंभ करने का प्रयास करता हूं तो संकलक इसे पसंद नहीं करता है (मुझे नीचे दिए गए उदाहरण में त्रुटि 'अनसुलझा पहचानकर्ता getDefaultString का उपयोग' मिलता है)। यहाँ एक टुकड़ा है कि मेरी समस्या यह दर्शाता है:स्विफ्ट में स्थिर फ़ंक्शन को कॉल करके मैं एक स्थिर चर प्रारंभ क्यों नहीं कर सकता?

import Foundation 

public class Settings { 
    private static var _bundle = NSBundle.mainBundle() 
    static func getDefaultString(key: String) -> String { 
     return _bundle.objectForInfoDictionaryKey(key) as! String 
    } 

    private static var _server = getDefaultString("DefaultServer") 
    public class var server: String { 
     get { return _server } 
     set { _server = newValue } 
    } 
} 

किसी की मदद कर सकते हैं मुझे समझने कारण है कि मैं ऐसा नहीं कर सकते?

+0

यदि आप 'निजी स्थैतिक var _server = सेटिंग्स.getDefaultString ("DefaultServer") 'का उपयोग करते हैं तो यह काम करता है? – NobodyNada

+1

वास्तव में, यह करता है। लेकिन मुझे समझ में नहीं आता क्यों? – markdb314

उत्तर

11

यह काम करना चाहिए:

private static var _server = Settings.getDefaultString("DefaultServer") 

मैं वास्तव में क्यों, ऐसा लगता है खेलने उस प्रकार के सामने योग्य बिना एक विधि एक उदाहरण विधि है में एक धारणा के कुछ प्रकार है कि वहाँ पता नहीं है। लेकिन यह पूरी तरह से काम नहीं करता है। जैसे इस खेल के मैदान में दिलचस्प परिणाम पैदा करता है:

class Foo { 

     static func initFoo() -> String { 
      return "static" 
     } 

     func initFoo() -> String { 
      return "instance" 
     } 

     static var foo: String = initFoo() 

    } 

    Foo.foo 

... initFoo() के सामने प्रकार अर्हता प्राप्त करने की कोई जरूरत, लेकिन अभी भी स्थिर एक उठाया जाता है। शायद एक मामूली बग।

0

आप संभावित (और वास्तविक) nil ऑब्जेक्ट का अनचाहे मजबूर कर रहे हैं। ,

func objectForInfoDictionaryKey(key: String) -> AnyObject? 

मेरे संपादन एक खेल का मैदान के रूप में:

import Foundation 

class Settings { 
    private static var _bundle = NSBundle.mainBundle() 
    static func getDefaultString(key: String) -> String? { 
     return _bundle.objectForInfoDictionaryKey(key) as? String 
    } 

    private static var _server = Settings.getDefaultString("DefaultServer") 

    class var server: String? { 
     get { return _server } 
     set { _server = newValue } 
    } 
} 

Settings.server 

आप, ज़ाहिर है, एक nil से वापस आने कर सकते हैं इसकी घोषणा -

return _bundle.objectForInfoDictionaryKey(key) as! String 

NSBundle के objectForInfoDictionaryKey शून्य लौट सकते हैं यदि आप चाहें तो किसी अन्य फैशन में।

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