Swift - Özellikler
Swift 4 dili, değerleri ilişkilendirmek için sınıf, numaralandırma veya yapı için özellikler sağlar. Özellikler ayrıca Saklanan özellikler ve Hesaplanmış özellikler olarak sınıflandırılabilir.
Depolanan Özellikler ve Hesaplanan Özellikler arasındaki fark
Depolanan Mülk | Hesaplanan Mülk |
---|---|
Sabit ve değişken değerleri örnek olarak saklayın | Değeri saklamak yerine bir değer hesaplayın |
Sınıflar ve yapılar tarafından sağlanır | Sınıflar, numaralandırmalar ve yapılar tarafından sağlanır |
Hem Depolanan hem de Hesaplanan özellikler, örnek türleriyle ilişkilendirilir. Özellikler tip değerleriyle ilişkilendirildiğinde 'Tip Özellikleri' olarak tanımlanır. Depolanan ve hesaplanan özellikler genellikle belirli bir türdeki örneklerle ilişkilendirilir. Bununla birlikte, özellikler aynı zamanda türün kendisiyle de ilişkilendirilebilir. Bu tür özellikler, tip özellikleri olarak bilinir. Emlak gözlemcileri de kullanılır
- Depolanan mülklerin değerini gözlemlemek için
- Üst sınıftan türetilen miras alınan alt sınıfın özelliğini gözlemlemek için
Depolanan Özellikler
Swift 4, sabitlerin ve değişkenlerin örneklerini depolamak için Depolanan Mülk konseptini sunar. Sabitlerin saklanan özellikleri 'let' anahtar sözcüğü ile tanımlanır ve değişkenlerin Saklanan özellikleri 'var' anahtar sözcüğü ile tanımlanır.
- Tanım sırasında Saklanan özellik 'varsayılan değer' sağlar
- Başlatma sırasında kullanıcı ilk değerleri başlatabilir ve değiştirebilir
struct Number {
var digits: Int
let pi = 3.1415
}
var n = Number(digits: 12345)
n.digits = 67
print("\(n.digits)")
print("\(n.pi)")
Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -
67
3.1415
Yukarıdaki kodda aşağıdaki satırı düşünün -
let pi = 3.1415
Burada pi değişkeni, pi = 3.1415 örneği ile depolanmış bir özellik değeri olarak başlatılır. Bu nedenle, örnek ne zaman yönlendirilirse, yalnızca 3.1415 değerini tutacaktır.
Depolanan mülke sahip olmanın başka bir yöntemi, sabit yapılar olarak sahip olmaktır. Dolayısıyla, yapıların tüm örneği 'Sabitlerin Saklanan Özellikleri' olarak kabul edilecektir.
struct Number {
var digits: Int
let numbers = 3.1415
}
var n = Number(digits: 12345)
n.digits = 67
print("\(n.digits)")
print("\(n.numbers)")
n.numbers = 8.7
Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -
error: cannot assign to 'numbers' in 'n'
n.numbers = 8.7
"Sayı" yı 8.7 olarak yeniden başlatmak yerine "sayı" nın sabit olarak bildirildiğini belirten bir hata mesajı döndürecektir.
Tembel Depolanan Mülk
Swift 4, değişken ilk kez başlatıldığında başlangıç değerlerini hesaplamayacağı 'Lazy Stored Property' adlı esnek bir özellik sağlar. 'lazy' değiştiricisi, onu bir tembel depolanan özellik olarak almak için değişken bildiriminden önce kullanılır.
Tembel Özellikler kullanılır -
- Nesne oluşturmayı geciktirmek için.
- Özellik bir sınıfın henüz bilinmeyen diğer bölümlerine bağlı olduğunda
class sample {
lazy var no = number() // `var` declaration is required.
}
class number {
var name = "Swift 4"
}
var firstsample = sample()
print(firstsample.no.name)
Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -
Swift 4
Örnek değişkenler
Amaç C'de, Depolanan özelliklerde, depolanan özellikte bildirilen değerleri depolamak için yedekleme amaçlı örnek değişkenleri de bulunur.
Swift 4, bu iki kavramı da tek bir 'depolanan özellik' bildiriminde birleştirir. Karşılık gelen bir örnek değişkenine ve yedekleme değerine sahip olmak yerine 'depolanmış özellik', değişken adı, veri türü ve bellek yönetimi işlevlerine göre değişkenler özelliği hakkında tek bir konumda tanımlanan tüm entegre bilgileri içerir.
Hesaplanan Özellikler
Değer hesaplanan özellikleri depolamak yerine, diğer özellikleri ve değerleri dolaylı olarak almak ve ayarlamak için bir alıcı ve isteğe bağlı bir ayarlayıcı sağlar.
class sample {
var no1 = 0.0, no2 = 0.0
var length = 300.0, breadth = 150.0
var middle: (Double, Double) {
get {
return (length / 2, breadth / 2)
}
set(axis){
no1 = axis.0 - (length / 2)
no2 = axis.1 - (breadth / 2)
}
}
}
var result = sample()
print(result.middle)
result.middle = (0.0, 10.0)
print(result.no1)
print(result.no2)
Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -
(150.0, 75.0)
-150.0
-65.0
Hesaplanan bir özellik yeni değeri tanımsız olarak bıraktığında, o değişken için varsayılan değer ayarlanacaktır.
Salt Okunur Özellikler Olarak Hesaplanan Özellikler
Hesaplanan özellikteki salt okunur özellik, alıcıya sahip ancak ayarlayıcı bulunmayan bir özellik olarak tanımlanır. Her zaman bir değer döndürmek için kullanılır. Değişkenlere ayrıca bir '.' Aracılığıyla erişilebilir. Sözdizimi ancak başka bir değere ayarlanamaz.
class film {
var head = ""
var duration = 0.0
var metaInfo: [String:String] {
return [
"head": self.head,
"duration":"\(self.duration)"
]
}
}
var movie = film()
movie.head = "Swift 4 Properties"
movie.duration = 3.09
print(movie.metaInfo["head"]!)
print(movie.metaInfo["duration"]!)
Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -
Swift 4 Properties
3.09
Özellik Gözlemcileri Olarak Hesaplanan Özellikler
Swift 4'te özellik değerlerini gözlemlemek ve bunlara yanıt vermek için Mülkiyet Gözlemcileri kullanılır. Özellik değerleri ayarlandığında her seferinde özellik gözlemcileri çağrılır. Tembel depolanan özellikler haricinde, "miras alınan" özelliğe "geçersiz kılma" yöntemiyle özellik gözlemcileri ekleyebiliriz.
Mülk Gözlemcileri aşağıdakilerden biri ile tanımlanabilir:
Değeri kaydetmeden önce - willset
Yeni değeri kaydettikten sonra - didset
Bir özellik bir başlatıcıda ayarlandığında ayarlanır ve didset gözlemcileri çağrılamaz.
class Samplepgm {
var counter: Int = 0 {
willSet(newTotal){
print("Total Counter is: \(newTotal)")
}
didSet {
if counter > oldValue {
print("Newly Added Counter \(counter - oldValue)")
}
}
}
}
let NewCounter = Samplepgm()
NewCounter.counter = 100
NewCounter.counter = 800
Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -
Total Counter is: 100
Newly Added Counter 100
Total Counter is: 800
Newly Added Counter 700
Yerel ve Küresel Değişkenler
Özellikleri hesaplamak ve gözlemlemek için yerel ve global değişken bildirilmiştir.
Yerel Değişkenler | Global Değişkenler |
---|---|
Bir işlev, yöntem veya kapanış bağlamı içinde tanımlanan değişkenler. | İşlev, yöntem, kapanış veya tür bağlamı dışında tanımlanan değişkenler. |
Değerleri saklamak ve almak için kullanılır. | Değerleri saklamak ve almak için kullanılır. |
Depolanan özellikler, değerleri almak ve ayarlamak için kullanılır. | Depolanan özellikler, değerleri almak ve ayarlamak için kullanılır. |
Hesaplanan özellikler de kullanılır. | Hesaplanan özellikler de kullanılır. |
Tip Özellikleri
Özellikler, Tür tanımı bölümünde kaşlı ayraçlarla {} tanımlanır ve değişkenlerin kapsamı da önceden tanımlanır. Değer türleri için tür özelliklerini tanımlamak için 'statik' anahtar sözcüğü ve sınıf türleri için 'sınıf' anahtar sözcüğü kullanılır.
Sözdizimi
struct Structname {
static var storedTypeProperty = " "
static var computedTypeProperty: Int {
// return an Int value here
}
}
enum Enumname {
static var storedTypeProperty = " "
static var computedTypeProperty: Int {
// return an Int value here
}
}
class Classname {
class var computedTypeProperty: Int {
// return an Int value here
}
}
Sorgulama ve Özellikleri Ayarlama
Örnek özellikleri gibi Tür özellikleri sorgulanır ve '.' Sözdizimi, örneğe işaret etmek yerine yalnızca tür üzerinde.
struct StudMarks {
static let markCount = 97
static var totalCount = 0
var InternalMarks: Int = 0 {
didSet {
if InternalMarks > StudMarks.markCount {
InternalMarks = StudMarks.markCount
}
if InternalMarks > StudMarks.totalCount {
StudMarks.totalCount = InternalMarks
}
}
}
}
var stud1Mark1 = StudMarks()
var stud1Mark2 = StudMarks()
stud1Mark1.InternalMarks = 98
print(stud1Mark1.InternalMarks)
stud1Mark2.InternalMarks = 87
print(stud1Mark2.InternalMarks)
Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -
97
87