let
- constant
var
-variable
[Sabit ve değişken]
[Struct - Class]
Resmi doc docs.swift.org diyor
A değeri constant
ayarlandıktan sonra değiştirilemezken, variable
a değeri gelecekte farklı bir değere ayarlanabilir.
Bu terminoloji aslında yeniden atama mekanizmasını tanımlamaktadır
Değişebilirlik - değiştirilebilir - nesnenin durumu yaratıldıktan sonra değiştirilebilir
Değer ve Referans Türü [Hakkında]
Değer (Yapı, Enum)
Swift struct
, değiştirilebilirlik durumlarını değiştirebilir:
let
+ struct
= immutable
= Değerinin sabit
Bu olabilir değil edilebilir yeniden veya değiştirilebilir
var
+ struct
= mutable
O olabilir yeniden veya değiştirilebilir
Referans Türü (Sınıf)
Swift en classes
şunlardır mutable
a-manastır
let
+ class
= Adresin sabit
O yapabilirsiniz değildir edilmesi yeniden edilebilir değişti
var
+ class
Bu edilebilir yeniden veya değiştirilebilir
//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
- Mutasyon Yapısı İşlevleri
Bir yapının yöntemini şu şekilde işaretleyebilirsiniz:mutating
- Bu işlevin dahili özellik değerlerini değiştirdiğini gösterir.
- Yalnızca
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
Bir işlev içindeki yapıyı değiştirme
Bir işlevin parametresini (struct olan) olarak işaretleyebilirsiniz. inout
Yana struct
bir değer türüne, bunun tarafından geçirilen değerin bir kopyasını alır bir sonuç fonksiyonu olarak. Eğer bir işaretlerseniz struct
olarak inout
parametrenin bu parametre hale gelmesi anlamına gelir var
ve hal değiştirmek edebiliyoruz struct
ve bu değişiklikler fonksiyon kapsamı dışında görünür olacak
//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
Mümkün olduğunca kullanın . Gerektiğinde kullanın var
.