let
- constant
var
-variable
[लगातार बनाम चर]
[संरचना बनाम कक्षा]
आधिकारिक doc docs.swift.org का कहना है
एक का मूल्य constant
एक जबकि, एक बार यह सेट नहीं बदला जा सकता variable
भविष्य में एक अलग मान पर सेट किया जा सकता है।
यह शब्दावली वास्तव में एक पुनर्मूल्यांकन तंत्र का वर्णन करती है
उत्परिवर्तन - परिवर्तनशील - निर्माण के बाद वस्तु की स्थिति को बदला जा सकता है
मान (संरचना, एनम)
स्विफ्ट की struct
परिवर्तनशीलता की स्थिति बदल सकती है:
let
+ struct
= immutable
= मूल्य की लगातार
यह कर सकते हैं नहीं किया जा पुन: असाइन या बदल
var
+ struct
= mutable
इसे पुन: सौंपा या बदला जा सकता है
संदर्भ प्रकार (कक्षा)
स्विफ्ट की classes
हैं mutable
एक-मठ
let
+ class
= पते की निरंतरता
यह आश्वस्त नहीं किया जा सकता है और इसे बदला जा सकता है
var
+ class
इसे पुन: सौंपा या बदला जा सकता है
//STRUCT
//let + struct
let letStructA = StructA()
//change FAIL
letStructA.a = 5 //Compile ERROR: Cannot assign to property: 'structALet' is a 'let' constant
//reassign FAIL
letStructA = StructA() // Compile ERROR: Cannot assign to value: 'structALet' is a 'let' constant
//var + struct
var varStructA = StructA()
//change OK
varStructA.a = 5
//reassign OK
varStructA = StructA()
//CLASS
//let + class
let letClassA = ClassA()
//change OK
letClassA.a = 5
//reassign FAIL
letClassA = ClassA() // Compile ERROR: Cannot assign to value: 'classALet' is a 'let' constant
//var + class
var varClassA = ClassA()
//change OK
varClassA.a = 5
//reassign OK
varClassA = ClassA()
mutating
- उत्परिवर्तन संरचना के कार्य
आप एक संरचना के तरीके को चिह्नित कर सकते हैंmutating
- इंगित करता है कि यह फ़ंक्शन आंतरिक गुण मान बदलता है।
- केवल
var
+ पर उपयोग किया जा सकता हैstruct
public struct StructA {
public var a = 0
public init() {}
//func foo() { //Compile ERROR: Cannot assign to property: 'self' is immutable
mutating func foo() {
a = 5
}
}
inout
किसी फ़ंक्शन के अंदर संरचना को संशोधित करना
आप एक फ़ंक्शन के पैरामीटर (जो कि संरचनात्मक है) को चिह्नित कर सकते हैं inout
struct
एक मूल्य प्रकार के बाद से , यह मूल्य द्वारा पारित किया जाता है परिणामस्वरूप फ़ंक्शन एक प्रतिलिपि प्राप्त करेगा। यदि आप एक पैरामीटर के struct
रूप में चिह्नित करते हैं inout
तो इसका मतलब है कि यह पैरामीटर बन गया है var
और आप एक स्थिति को बदलने में सक्षम हैं struct
और ये परिवर्तन फ़ंक्शन स्कोप के बाहर दिखाई देंगे
//func foo(myStruct: StructA) { //Compile ERROR: line - myStruct.a = 10: Cannot assign to property: 's' is a 'let' constant
func foo(myStruct: inout StructA) {
myStruct.a = 10
}
//using
//foo(myStruct: &letStructA) // Compile EROOR: Cannot pass immutable value as inout argument: 'letStructA' is a 'let' constant
foo(myStruct: &varStructA)
let
जब भी आप कर सकते हैं का उपयोग करें । var
जब आप का उपयोग करें ।