2015-11-24 5 views
5

मैं अपने स्विफ्ट प्रोजेक्ट में एक कॉन्स्टेंट फ़ाइल बनाना चाहता हूं - स्थिर स्ट्रिंग स्ट्रिंग से भरा हुआ।स्विफ्ट कॉन्स्टेंट फ़ाइल - कक्षा या संरचना?

क्या मुझे संरचना या कक्षा के रूप में बनाना चाहिए? और क्यों?

struct staticStrings { 

    static let name = "String1" 
    static let age = "age1" 

} 

और डेटा का उपयोग करने को विश्व स्तर पर सिर्फ staticStrings.name फोन:

उत्तर

5
एक वर्ग आप एक उपवर्ग और स्पष्ट रूप से override class तरीकों बना सकते हैं के साथ

। यदि आप पूरी तरह से static का उपयोग कर रहे हैं तो कोई अंतर नहीं है।

यदि गुण वैल्यू प्रकार हैं, static if let someTypeProperty ठीक होगा। यदि वे संदर्भ प्रकार हैं तो कुछ अतिरिक्त देखभाल की आवश्यकता है।


बस गुणों के साथ कुछ सामान:

struct PresetStringsStruct { 

    static let someString : String = "Some Text" // struct 
    static let someView : UIView = UIView(frame: CGRectZero) 

    private init() { 
     print("init") // never happens 
    } 
} 

class PresetStringsClass { 

    static let someString : String = "Some Text" // struct 
    static let someView : UIView = UIView(frame: CGRectZero) 

    private init() { 
     print("init") // never happens 
    } 
} 

struct गुण अपेक्षा के अनुरूप काम।

// value properties 
var txtStruct = PresetStringsStruct.someString // "Some Text" 
txtStruct = "SomeOtherText" // "SomeOtherText" 
var txtStruct2 = PresetStringsStruct.someString // "Some Text" 

var txtClass = PresetStringsClass.someString // "Some Text" 
txtClass = "SomeOtherText" // "SomeOtherText" 
var txtClass2 = PresetStringsClass.someString // "Some Text" 

जब संपत्ति एक reference type स्थिर गुणों एक उदाहरण के लिए संदर्भ वापस आ जाएगी है।

// reference properties 
var viewStruct = PresetStringsStruct.someView 
viewStruct.frame = CGRect(x: 0, y: 0, width: 50, height: 50) 
var viewStruct2 = PresetStringsStruct.someView // CGRect(x: 0, y: 0, width: 50, height: 50) 

var viewClass = PresetStringsClass.someView 
viewClass.frame = CGRect(x: 0, y: 0, width: 50, height: 50) 
var viewClass2 = PresetStringsClass.someView // CGRect(x: 0, y: 0, width: 50, height: 50) 

केवल मूर्ख सबूत विधि मुझे पता है कि के static कार्यों का उपयोग करने के लिए है। यदि आप subclassclass और override फ़ंक्शंस में सक्षम होना चाहते हैं तो आप स्पष्ट रूप से class फ़ंक्शंस का उपयोग कर सकते हैं। (static ओवरराइड की अनुमति नहीं है और वास्तव में class final के लिए एक उपनाम है)

यह भी स्मृति में शेष से भी कई प्रकार गुण होने से बचाता है कोई रास्ता नहीं एक static let someProperty : Int = 0

struct PresetStringsStruct { 

    static func someStringFunc() -> String { 
     return "SomeText" 
    } 

    static func someViewFunc() -> UIView { 
     return UIView(frame: CGRectZero) 
    } 
} 

class PresetStringsClass { 

    static func someStringFunc() -> String { 
     return "SomeText" 
    } 

    static func someViewFunc() -> UIView { 
     return UIView(frame: CGRectZero) 
    } 
} 

से छुटकारा पाने के नहीं है

फिर यह तय करने के लिए आप क्या अधिक समझ में आता है। संलग्न होने से struct या class कभी भी इसका उपयोग नहीं किया जाता है, इससे कोई फर्क नहीं पड़ता।मेरे लिए struct अधिक समझ में आता है क्योंकि मैं classes के साथ बहुत अधिक व्यवहार जोड़ता हूं।


तुम भी अपने आप को अधिक काम दे सकता है और () कि गुण के बजाय कार्यों का उपयोग करने से परिणाम से छुटकारा पाने के।

struct PresetStringsStruct { 

    static var someString : String { 
     get { 
      return someStringFunc() 
     } 
    } 

    static var someView : UIView { 
     get { 
      return someViewFunc() 
     } 
    } 

    static func someStringFunc() -> String { 
     return "SomeText" 
    } 

    static func someViewFunc() -> UIView { 
     return UIView(frame: CGRectZero) 
    } 
} 

var viewStruct = PresetStringsStruct.someView 
viewStruct.frame = CGRect(x: 0, y: 0, width: 50, height: 50) 
var viewStruct2 = PresetStringsStruct.someView // CGRect(x: 0, y: 0, width: 0, height: 0) 
1

आप स्थिर डेटा के लिए structs का उपयोग कर सकते सबसे अच्छा विकल्प है।

क्यों हम वर्ग से structs और उसके बेहतर उपयोग करें: अगर वे अपेक्षाकृत छोटे और copiable रहे हैं, क्योंकि नकल तरह से कक्षाओं के साथ होता है के रूप में ही उदाहरण के लिए कई संदर्भ की तुलना में सुरक्षित है Structs बेहतर हैं।

अधिक जानकारी के लिए: structs and classes

+0

जब किसी वर्ग या संरचना में केवल स्थिर गुण/विधियां होती हैं और कभी शुरू नहीं की जाएंगी, इससे कोई फर्क नहीं पड़ता कि यह प्रकार एक संदर्भ या मान प्रकार है। यह केवल मायने रखता है कि उनका व्यवहार उनके गुणों के व्यवहार को कैसे प्रभावित करता है। –

+0

वैसे यह सच है @RMenke। –

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