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जब आप का उपयोग करें ।