Latest web development tutorials

immobili Swift

valore della proprietà Swift con una specifica classe, struttura o associazione enumerazione.

Proprietà può essere diviso in proprietà di stoccaggio e proprietà calcolata:

Proprietà NegozioProprietà di calcolo
Come esempio di una parte di memorizzazione costante o variabile Calcolato (invece di memorizzare) un valore
Per le classi e le strutture Per le classi, strutture ed enumerazioni

proprietà e le proprietà di stoccaggio sono generalmente utilizzati per calcolare le istanze di un tipo particolare.

Le proprietà possono anche essere utilizzati direttamente nel tipo di per sé, questa proprietà è chiamata attributo type.

In alternativa, è possibile definire le proprietà dell'osservatore per monitorare i cambiamenti nei valori di proprietà, al fine di innescare un'operazione personalizzata. visualizzatore di attributo può essere aggiunto a scrivere il proprio attributo di memoria possono essere aggiunti alle proprietà ereditate dalla classe genitore.


Proprietà Negozio

In termini semplici, un attributo memoria è una costante o variabile memorizzata nel caso di una particolare classe o struttura interna.

Proprietà di archiviazione può essere un attributi di stoccaggio variabili (definiti dalla parola chiave var), ma può anche essere un attributi di stoccaggio costanti (definiti dalla parola chiave lasciare).

  • È possibile specificare un valore predefinito nella proprietà in cui le definizioni sono memorizzate

  • È inoltre possibile impostare o modificare il valore memorizzato della proprietà durante la costruzione, e anche modificare il valore della proprietà di archiviazione costante

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)")

L'output sopra l'esecuzione del programma è il seguente:

67
3.1415

Si consideri il seguente codice:

let pi = 3.1415

Codice PI specificare i valori di default memorizzati nell'attributo definizione quando (pi = 3.1415), quindi non importa quando si crea un'istanza della struttura, non cambierà.

Se si definisce una proprietà di stoccaggio costante, si lamenterà se si tenta di modificare nel modo seguente:

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

L'errore esecuzione del programma sopra, l'errore è il seguente:

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

Che significa 'numeri' è una costante, non è possibile modificarlo.


Proprietà di archiviazione di ritardo

attributo memoria Delay si riferisce alla prima volta quando la proprietà viene chiamata verrà calcolato il valore iniziale.

Prima di utilizzare la dichiarazione di attributopigro per indicare una proprietà negozio di ritardo.

Nota:
proprietà di ritardo di stoccaggio deve essere dichiarato come variabile (utilizzando il var parola chiave), in quanto il valore della proprietà non può essere completata prima della costruttore di istanza. La proprietà costante prima costruzione è completa deve avere un valore iniziale, e quindi non può essere dichiarata come proprietà ritardata.

proprietà Ritardo di memorizzazione sono generalmente utilizzati:

  • Ritardare la creazione di oggetti.

  • Quando il valore della proprietà dipende dall'altro classe sconosciuta

import Cocoa

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

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

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

L'output sopra l'esecuzione del programma è il seguente:

w3big Swift 教程

Esempi di variabili

Se avete avuto esperienza in Objective-C, si dovrebbe conoscere il valore di archiviazione istanza di classe Objective-C e riferimento fornisce due metodi. Per la proprietà, può essere utilizzato anche come variabili istanza backend per memorizzare valori di proprietà.

linguaggio di programmazione Swift utilizzare queste teorie per ottenere una struttura unitaria. Swift attributi non corrispondenti variabili di istanza, le proprietà di storage back-end non è possibile accedere direttamente. Ciò evita i problemi di metodi di accesso sotto diversi scenari, ma anche di semplificare la definizione di proprietà come una dichiarazione.

Tutte le informazioni in un tipo di proprietà - compreso il nome, il tipo e le funzionalità di gestione della memoria - il tutto in un luogo unico (Type Definition) definizioni.


Proprietà di calcolo

In aggiunta agli attributi di stoccaggio, le categorie, le strutture e le enumerazioni può essere definita per calcolare i valori delle proprietà calcolato attributo non viene memorizzato direttamente, ma di fornire un getter per ottenere il valore di un setter opzionale per impostare il valore di altre proprietà o variabili indirette.

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)

L'output sopra l'esecuzione del programma è il seguente:

(150.0, 75.0)
-150.0
-65.0

Se il setter proprietà calcolata non definisce il nome del parametro rappresenta il nuovo valore, è possibile utilizzare il nome predefinito newValue.


Attributo di sola lettura di calcolo

Getter Solo non calcolato setter di proprietà è un attributo di sola lettura calcolo.

Proprietà di sola lettura restituisce sempre un valore calcolato, (.) Operatore per accedere via punto, ma non è possibile impostare il nuovo valore.

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"]!)

L'output sopra l'esecuzione del programma è il seguente:

Swift 属性
3.09

Nota:

È necessario utilizzare la var parola chiave per definire gli attributi calcolati, tra cui il calcolo attributo di sola lettura, perché il loro valore non è fisso. let parola chiave viene utilizzata solo per dichiarare un attributo costante che non può essere modificato dopo valore di inizializzazione.


Proprietà Observer

Modifica attributo spettatore per monitorare e rispondere agli valore della proprietà ogni proprietà viene impostata quando sarà chiamato il valore della proprietà di osservare, e anche il nuovo valore e il valore attuale del tempo stesso non fa eccezione.

È possibile aggiungere proprietà per lo spettatore oltre alla memoria di ritardo attributo diverso da proprietà di archiviazione può anche aggiungere attributi osservatore per una proprietà ereditata (compreso lo stoccaggio e calcolando gli attributi di proprietà) sovrascrivendo modi degli attributi.

Nota:
Non è necessario aggiungere un osservatore proprietà per il calcolo delle proprietà non può essere sovraccaricato, perché è possibile monitorare direttamente e rispondere ai cambiamenti del valore setter.

È possibile aggiungere una o tutte le seguenti dell'osservatore per la proprietà:

  • willSet prima di impostare una nuova chiamata del valore
  • didSet dopo un nuovo valore è impostato su chiamare immediatamente
  • willSet e didSet osservatore non sarà chiamato nella proprietà processo di inizializzazione
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

L'output sopra l'esecuzione del programma è il seguente:

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

variabili globali e locali

Modalità calcolo attributi e osservatore descritto può essere utilizzato anche per le variabili globali e locali.

Le variabili localiVariabili globali
Nella funzione, metodo o chiusure interne variabili definite. Variabile fuori della funzione, metodo o qualsiasi tipo di definizione di chiusura.
Per archiviare e recuperare i valori. Per archiviare e recuperare i valori.
Proprietà di archiviazione per ottenere e impostare il valore. Proprietà di archiviazione per ottenere e impostare il valore.
Utilizzato anche per calcolare le proprietà. Utilizzato anche per calcolare le proprietà.

Tipo di proprietà

attributo type è definito come parte del tipo nel tipo di scrittura parentesi graffe ultraperiferiche ({}) all'interno.

Usa la parola chiave static per definire il tipo di valore di attributo tipo, la classe parola chiave per definire un attributo di tipo di classe.

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 值
   }
}

Nota:
Esempio di calcolo dell'attributo type è di sola lettura, ma si può anche definire computazionale tipo di sintassi di attributo di calcolo simile lettura e scrittura con l'attributo di istanza.


Ottenere e impostare il valore del tipo di proprietà

Esempi di proprietà simili, il tipo di accesso alla proprietà avviene dall'operatore punto (.). Tuttavia, il tipo di struttura è quello di ottenere attraverso e impostare il tipo stesso, piuttosto che a titolo di esempio. Esempi sono i seguenti:

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)

L'output sopra l'esecuzione del programma è il seguente:

97
87