Latest web development tutorials

properti Swift

nilai properti Swift dengan kelas, struktur, atau asosiasi pencacahan tertentu.

Properti dapat dibagi menjadi sifat penyimpanan dan sifat dihitung:

toko Propertiperhitungan Properti
Sebagai contoh bagian penyimpanan konstan atau variabel Dihitung (daripada menyimpan) nilai
Untuk kelas dan struktur Untuk kelas, struktur, dan mantri

sifat penyimpanan dan sifat umumnya digunakan untuk menghitung contoh dari jenis tertentu.

Properties juga dapat digunakan secara langsung dalam jenis itu sendiri, properti ini disebut jenis atribut.

Atau, Anda dapat menentukan sifat pengamat untuk memantau perubahan nilai properti, untuk memicu operasi kustom. Atribut viewer dapat ditambahkan untuk menulis atribut memori mereka sendiri dapat ditambahkan ke sifat yang diwarisi dari kelas induk.


toko Properti

Dalam istilah sederhana, atribut memori adalah konstan atau variabel yang disimpan dalam contoh dari kelas tertentu atau struktur dalam.

properti penyimpanan dapat menjadi atribut penyimpanan variabel (didefinisikan oleh var kata kunci), itu juga bisa menjadi atribut penyimpanan konstan (didefinisikan oleh kata kunci biarkan).

  • Anda dapat menentukan nilai default di properti ketika definisi disimpan

  • Anda juga dapat mengatur atau memodifikasi nilai yang disimpan dalam properti selama konstruksi, dan bahkan mengubah nilai properti penyimpanan konstan

import Cocoa

struct Number
{
   var digits: Int
   let pi = 3.1415
}

var n = Number(digits: 12345)
n.digits = 67

print("\(n.digits)")
print("\(n.pi)")

Output di atas eksekusi program adalah:

67
3.1415

Perhatikan kode berikut:

let pi = 3.1415

Kode pi menentukan nilai default disimpan dalam atribut definisi ketika (pi = 3,1415), sehingga tidak peduli ketika Anda instantiate struktur, itu tidak akan berubah.

Jika Anda mendefinisikan properti penyimpanan konstan, itu akan mengeluh jika Anda mencoba untuk memodifikasi sebagai berikut:

import Cocoa

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

Kesalahan eksekusi program di atas, kesalahan adalah sebagai berikut:

error: cannot assign to property: 'numbers' is a 'let' constant
n.numbers = 8.7

Yang berarti 'angka' adalah konstan, Anda tidak dapat mengubah itu.


Delay Storage Properti

atribut memori penundaan mengacu pertama kalinya ketika properti disebut nilai awalnya akan dihitung.

Sebelum menggunakan deklarasi atributmalas untuk menunjukkan sifat penundaan toko.

Catatan:
Properti keterlambatan Penyimpanan harus dinyatakan sebagai variabel (menggunakan var kata kunci), karena nilai properti tidak akan selesai sebelum contoh konstruktor. Properti konstan sebelum pembangunan selesai harus memiliki nilai awal, dan karena itu tidak dapat dinyatakan sebagai properti tertunda.

sifat penundaan Storage umumnya digunakan:

  • Menunda penciptaan benda-benda.

  • Ketika nilai properti tergantung pada kelas lain yang tidak diketahui

import Cocoa

class sample {
    lazy var no = number() // `var` 关键字是必须的
}

class number {
    var name = "w3big Swift 教程"
}

var firstsample = sample()
print(firstsample.no.name)

Output di atas eksekusi program adalah:

w3big Swift 教程

Contoh variabel

Jika Anda telah memiliki pengalaman di Objective-C, Anda harus tahu Objective-C nilai storage kelas contoh dan referensi menyediakan dua metode. Untuk properti, itu juga dapat digunakan sebagai variabel backend misalnya untuk menyimpan nilai properti.

bahasa pemrograman Swift menggunakan teori-teori ini untuk mencapai properti terpadu. Swift atribut tidak ada variabel contoh yang sesuai, sifat penyimpanan back-end tidak dapat diakses secara langsung. Hal ini untuk menghindari masalah metode akses di bawah skenario yang berbeda, tetapi juga untuk menyederhanakan definisi properti sebagai pernyataan.

Semua informasi dalam jenis properti - termasuk nama, jenis, dan fitur manajemen memori - semua di tempat yang unik (jenis definisi) definisi.


perhitungan Properti

Selain atribut penyimpanan, kategori, struktur, dan mantri dapat didefinisikan untuk menghitung nilai properti dihitung atribut tidak disimpan secara langsung, tetapi untuk memberikan getter untuk mendapatkan nilai suatu setter opsional untuk mengatur nilai properti lain atau variabel tidak langsung.

import Cocoa

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)

Output di atas eksekusi program adalah:

(150.0, 75.0)
-150.0
-65.0

Jika setter properti dihitung tidak mendefinisikan nama parameter merupakan nilai baru, Anda dapat menggunakan nama default newValue.


Atribut read-only perhitungan

Hanya Getter tidak dihitung setter properti adalah atribut read-only perhitungan.

Read-only properti selalu mengembalikan nilai yang dihitung, (.) Operator mengakses melalui titik, tetapi tidak dapat mengatur nilai baru.

import Cocoa

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 属性"
movie.duration = 3.09

print(movie.metaInfo["head"]!)
print(movie.metaInfo["duration"]!)

Output di atas eksekusi program adalah:

Swift 属性
3.09

Catatan:

Anda harus menggunakan var kata kunci untuk menentukan atribut dihitung, termasuk atribut read-only perhitungan, karena nilai mereka tidak tetap. let kata kunci hanya digunakan untuk menyatakan atribut yang konstan yang tidak dapat diubah setelah nilai inisialisasi.


properti Observer

Perubahan atribut penampil untuk memantau dan menanggapi nilai properti setiap properti diatur ketika nilai properti akan dipanggil untuk mengamati, dan bahkan nilai baru dan nilai saat ini dari waktu yang sama tidak terkecuali.

Anda dapat menambahkan properti untuk penampil selain memori delay atribut selain sifat penyimpanan juga dapat menambahkan atribut pengamat untuk properti warisan (termasuk penyimpanan dan komputasi atribut properti) dengan menimpa cara atribut.

Catatan:
Anda tidak perlu menambahkan pengamat properti untuk perhitungan sifat tidak dapat kelebihan beban, karena Anda dapat langsung memonitor dan merespon perubahan nilai setter.

Anda dapat menambahkan satu atau semua pengamat berikut untuk properti:

  • willSet sebelum menetapkan panggilan nilai baru
  • didSet setelah nilai baru diatur untuk memanggil segera
  • willSet dan didSet pengamat tidak akan dipanggil dalam properti proses inisialisasi
import Cocoa

class Samplepgm {
    var counter: Int = 0{
        willSet(newTotal){
            print("计数器: \(newTotal)")
        }
        didSet{
            if counter > oldValue {
                print("新增数 \(counter - oldValue)")
            }
        }
    }
}
let NewCounter = Samplepgm()
NewCounter.counter = 100
NewCounter.counter = 800

Output di atas eksekusi program adalah:

计数器: 100
新增数 100
计数器: 800
新增数 700

variabel global dan lokal

mode perhitungan atribut dan pengamat menggambarkan juga dapat digunakan untuk variabel global dan lokal.

variabel lokalVariabel global
Dalam fungsi, metode, atau penutupan internal yang variabel didefinisikan. Variabel di luar fungsi, metode, atau jenis definisi penutupan.
Untuk menyimpan dan mengambil nilai-nilai. Untuk menyimpan dan mengambil nilai-nilai.
Properti penyimpanan untuk mendapatkan dan menetapkan nilai. Properti penyimpanan untuk mendapatkan dan menetapkan nilai.
Juga digunakan untuk menghitung sifat. Juga digunakan untuk menghitung sifat.

Jenis properti

Jenis atribut didefinisikan sebagai bagian dari jenis dalam jenis menulis kurung kurawal terluar ({}) di dalam.

Gunakan kata kunci statis untuk menentukan jenis atribut jenis nilai, kelas kata kunci untuk menentukan jenis atribut class.

struct Structname {
   static var storedTypeProperty = " "
   static var computedTypeProperty: Int {
      // 这里返回一个 Int 值
   }
}

enum Enumname {
   static var storedTypeProperty = " "
   static var computedTypeProperty: Int {
      // 这里返回一个 Int 值
   }
}

class Classname {
   class var computedTypeProperty: Int {
      // 这里返回一个 Int 值
   }
}

Catatan:
contoh komputasi dari jenis atribut read-only, tetapi Anda juga dapat menentukan komputasi dapat dibaca dan ditulis jenis atribut sintaks perhitungan yang sama dengan atribut instance.


Dapatkan dan menetapkan nilai jenis properti

Contoh sifat yang mirip, jenis akses ke properti dilakukan oleh operator titik (.). Namun, jenis properti untuk melewati dan mengatur jenis itu sendiri, bukan dengan cara misalnya. Contohnya adalah sebagai berikut:

import Cocoa

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)

Output di atas eksekusi program adalah:

97
87