Latest web development tutorials

propriété Swift

valeur de la propriété Swift avec une classe, une structure ou association spécifique de dénombrement.

La propriété peut être divisé en propriétés de stockage et les propriétés calculées:

Propriétés du magasinPropriétés de calcul
A titre d'exemple d'une partie constante ou variable de stockage Calculé (plutôt que de stocker) une valeur
Pour les classes et les structures Pour les classes, les structures et les énumérations

propriétés de stockage et les propriétés sont généralement utilisées pour calculer les instances d'un type particulier.

Les propriétés peuvent également être utilisés directement dans le type lui-même, cette propriété est appelée attribut type.

Alternativement, vous pouvez définir les propriétés observateur pour surveiller les changements dans la valeur des propriétés, afin de déclencher une opération personnalisée. Attribut spectateur peut être ajouté à écrire leur propre attribut de mémoire peut être ajouté aux propriétés héritées de la classe parente.


Propriétés du magasin

En termes simples, un attribut de mémoire est une constante ou variable stockée dans l'instance d'une classe ou d'une structure particulière à l'intérieur.

propriété de stockage peut être une variable attributs de stockage (définies par le mot-clé var), il peut aussi être un des attributs de stockage constants (définis par le mot-clé let).

  • Vous pouvez spécifier une valeur par défaut dans la propriété lorsque les définitions sont stockées

  • Vous pouvez également définir ou modifier la valeur stockée de la propriété pendant la construction, et même modifier la valeur de la propriété de stockage constante

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

La sortie de l'exécution du programme ci-dessus est la suivante:

67
3.1415

Considérez le code suivant:

let pi = 3.1415

Code de pi spécifier des valeurs par défaut stockées dans l'attribut de définition quand (pi = 3,1415), donc peu importe quand vous instancier la structure, il ne changera pas.

Si vous définissez une propriété de stockage constante, il va se plaindre si vous essayez de modifier comme suit:

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'erreur d'exécution du programme ci-dessus, l'erreur est la suivante:

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

Signification «nombres» est une constante, vous ne pouvez pas le modifier.


Retard Propriétés de stockage

Retard attribut mémoire se réfère à la première fois lorsque la propriété est appelée sa valeur initiale sera calculée.

Avant d' utiliser la déclaration d'attributparesseux pour indiquer un retard propriétés de magasin.

Remarque:
propriété Retard de stockage doit être déclarée comme une variable ( en utilisant le var mot - clé), puisque la valeur de la propriété ne peut pas être terminée avant que le constructeur d'instance. La propriété constante avant que la construction est terminée doit avoir une valeur initiale, et donc ne peut pas être déclarée comme propriété retardée.

propriétés Délai de stockage sont généralement utilisés:

  • Retarder la création d'objets.

  • Lorsque la valeur de la propriété dépend de l'autre classe inconnue

import Cocoa

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

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

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

La sortie de l'exécution du programme ci-dessus est la suivante:

w3big Swift 教程

Des exemples de variables

Si vous avez eu une expérience en Objective-C, vous devez connaître la valeur de stockage Objective-C instance de classe et de référence fournit deux méthodes. Pour la propriété, il peut également être utilisé en tant que variables d'instance de backend pour stocker des valeurs de propriété.

langage de programmation Swift utiliser ces théories pour obtenir une propriété unifiée. Swift attribue pas des variables d'instance correspondantes, propriétés de stockage back-end ne peuvent pas être directement accessibles. Cela évite les problèmes d'accès des méthodes selon différents scénarios, mais aussi de simplifier la définition des biens comme une déclaration.

Toutes les informations dans un type de propriété - y compris le nom, le type et les fonctionnalités de gestion de la mémoire - le tout dans un lieu unique (définition de type) définitions.


Propriétés de calcul

En plus des attributs de stockage, les catégories, les structures et les énumérations peuvent être définies pour calculer les valeurs de propriété calculée attribut ne sont pas stockées directement, mais de fournir un getter pour obtenir la valeur d'un setter option pour définir la valeur des autres propriétés ou variables indirectes.

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)

La sortie de l'exécution du programme ci-dessus est la suivante:

(150.0, 75.0)
-150.0
-65.0

Si le setter de propriété calculée ne définit pas le nom du paramètre représente la nouvelle valeur, vous pouvez utiliser le nom par défaut newValue.


Attribut de lecture seule calcul

Seulement getter pas calculé setter de la propriété est un attribut de lecture seule calcul.

Lecture seule propriété renvoie toujours une valeur calculée, (.) Opérateur pour accéder par le point, mais ne peut pas définir la nouvelle valeur.

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

La sortie de l'exécution du programme ci-dessus est la suivante:

Swift 属性
3.09

Remarque:

Vous devez utiliser le var mot - clé pour définir des attributs calculés, y compris attribut de lecture seule calcul, parce que leur valeur est pas fixé. let mot - clé est utilisé uniquement pour déclarer un attribut constant qui ne peut être modifiée après la valeur d'initialisation.


propriété Observateur

Changement d'attribut viewer pour surveiller et répondre à la valeur de la propriété de chaque propriété est définie lorsque la valeur de la propriété sera appelée à observer, et même la nouvelle valeur et la valeur actuelle du même temps ne fait pas exception.

Vous pouvez ajouter des propriétés au spectateur en plus de la mémoire de retard attribut autre que les propriétés de stockage peuvent également ajouter des attributs observateur d'une propriété héritée (y compris le stockage et le calcul des attributs de propriété) en remplaçant l'attribut façons.

Remarque:
Vous n'avez pas besoin d'ajouter un observateur de la propriété pour le calcul des propriétés ne peut pas être surchargé, parce que vous pouvez directement contrôler et répondre aux changements valeur setter.

Vous pouvez ajouter un ou plusieurs de l'observateur suivante pour la propriété:

  • willSet avant de fixer un nouvel appel de valeur
  • didSet après une nouvelle valeur est d'appeler immédiatement
  • willSet et didSet observateur ne sera pas appelé dans la propriété processus d'initialisation
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

La sortie de l'exécution du programme ci-dessus est la suivante:

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

Les variables globales et locales

Mode de calcul des attributs et de l'observateur décrit peut également être utilisé pour les variables globales et locales.

Lesvariables localesVariables globales
Dans la fonction, la méthode ou les bouclages internes variables définies. Variable en dehors de la fonction, la méthode ou de tout type de définition de fermeture.
Pour le stockage et la récupération de valeurs. Pour le stockage et la récupération de valeurs.
Propriété de stockage pour obtenir et définir la valeur. Propriété de stockage pour obtenir et définir la valeur.
Également utilisé pour calculer les propriétés. Également utilisé pour calculer les propriétés.

Type de propriété

Attribut Type est défini comme faisant partie du type dans le type d'écriture accolades ultrapériphériques ({}) à l'intérieur.

Utilisez le mot-clé statique pour définir le type de valeur type d'attribut, mot-clé class pour définir un attribut de type de 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 值
   }
}

Remarque:
Exemple de calcul de l'attribut type est en lecture seule, mais vous pouvez également définir de calcul syntaxe d'attribut de type calcul similaire lisible et inscriptible avec l'attribut d'instance.


Obtenez et définissez la valeur du type de propriété

Des exemples de propriétés similaires, le type d'accès à la propriété est réalisée par l'opérateur de point (.). Cependant, le type de propriété est de passer à travers et de définir le type lui-même, plutôt que à titre d'exemple. Des exemples sont les suivants:

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)

La sortie de l'exécution du programme ci-dessus est la suivante:

97
87