एक वर्ग आप एक उपवर्ग और स्पष्ट रूप से
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
कार्यों का उपयोग करने के लिए है। यदि आप subclass
class
और 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)
जब किसी वर्ग या संरचना में केवल स्थिर गुण/विधियां होती हैं और कभी शुरू नहीं की जाएंगी, इससे कोई फर्क नहीं पड़ता कि यह प्रकार एक संदर्भ या मान प्रकार है। यह केवल मायने रखता है कि उनका व्यवहार उनके गुणों के व्यवहार को कैसे प्रभावित करता है। –
वैसे यह सच है @RMenke। –