web-dev-qa-db-fra.com

@ property/@ synthesize équivalent en swift

Nous avions l'habitude de déclarer property pour transmettre des données entre les classes comme suit:

.h file (interface file)
@property (nonatomic) double topSpeed;

.m file (implementation file)
@synthesize topSpeed;

Maintenant, il n'y a pas de classe interface, comment passer des données entre les classes .Swift?

37
Mutawe

Swift ne différencie pas les propriétés des variables d’instance (c’est-à-dire le magasin sous-jacent d’une propriété). Pour définir une propriété, vous déclarez simplement une variable dans le contexte d'une classe.

Une classe Swift est simplement un fichier ClassName.Swift.

Vous déclarez une classe et des propriétés en tant que

class SomeClass {

  var topSpeed: Double
  var aStrProperty: String
  var anIntProperty: Int

  //Initializers and other functions

}

Vous accédez aux valeurs de propriété via la notation par points. Depuis Xcode6 beta 4, il existe également des modificateurs d'accès (public, internal et private) dans Swift. Par défaut, chaque propriété est internal. Voir ici pour plus d'informations.

Pour plus d'informations, reportez-vous au Guide de programmation Swift :

Propriétés stockées et variables d'instance

Si vous avez de l'expérience avec Objective-C, vous savez peut-être qu'il fournit deux façons de stocker des valeurs et des références dans le cadre d'une instance de classe . Outre les propriétés, vous pouvez utiliser des variables d'instance comme support stocker pour les valeurs stockées dans une propriété.

Swift unifie ces concepts dans une déclaration de propriété unique. UNE La propriété Swift n'a pas de variable d'instance correspondante, et le magasin de support d'une propriété n'est pas accessible directement. Ce Cette approche évite les confusions sur la manière dont la valeur est accédée dans différents contextes et simplifie la déclaration de la propriété en un seul, déclaration définitive. Toutes les informations sur la propriété, y compris son nom, type et caractéristiques de gestion de la mémoire - est défini dans un emplacement unique dans la définition du type.

53
Cezar

Utilisation des propriétés.

Du Guide de programmation Swift :

Propriétés stockées et variables d'instance

Si vous avez de l'expérience avec Objective-C, vous savez peut-être qu'il fournit deux façons de stocker des valeurs et des références dans le cadre d'une instance de classe . Outre les propriétés, vous pouvez utiliser des variables d'instance comme support stocker pour les valeurs stockées dans une propriété.

Swift unifie ces concepts dans une déclaration de propriété unique. UNE La propriété Swift n'a pas de variable d'instance correspondante, et le magasin de support d'une propriété n'est pas accessible directement. Ce Cette approche évite les confusions sur la manière dont la valeur est accédée dans différents contextes et simplifie la déclaration de la propriété en un seul, déclaration définitive. Toutes les informations sur la propriété, y compris son nom, type et caractéristiques de gestion de la mémoire - est défini dans un emplacement unique dans la définition du type.

13
trojanfoe

Les propriétés dans Objective-C correspondent aux propriétés dans Swift. Il existe deux manières d'implémenter des propriétés dans Objective-C et Swift:

  1. Propriétés synthétisées/auto-synthétisées dans Objective C - elles sont appelées "propriétés stockées" dans Swift. Vous le déclarez simplement avec var topSpeed : Double ou let topSpeed : Double = 4.2 dans une déclaration de classe, exactement comme vous déclareriez une variable locale dans un corps de fonction. Vous ne pouvez pas spécifier le nom de la variable d'instance de sauvegarde car, eh bien, il n'y a actuellement aucune variable d'instance dans Swift. Vous devez toujours utiliser la propriété au lieu de sa variable d'instance de sauvegarde.
  2. Propriétés implémentées manuellement dans Objective-C - elles sont appelées "propriétés calculées" dans Swift. Vous les déclarez dans la déclaration de classe comme var topSpeed : Double { get { getter code here } set { setter code here } } (pour les propriétés readwrite) ou var topSpeed : Double { getter code here } (pour les propriétés readonly).
3
newacct

Il semble qu'au moins une partie de votre question concerne la communication de l'interface d'une classe donnée avec d'autres classes. Comme Java (et contrairement à C, C++ et Objective-C), Swift ne sépare pas l'interface de l'implémentation. Vous n'avez pas import un fichier d'en-tête si vous souhaitez utiliser des symboles définis ailleurs. Au lieu de cela, vous import un module , comme:

import Foundation
import MyClass

Pour accéder aux propriétés d'une autre classe, importez cette classe.

1
Caleb

Propriétés stockées et variables d'instance

Si vous avez de l'expérience avec Objective-C, vous savez peut-être qu'il fournit deux méthodes pour stocker des valeurs et des références dans le cadre d'une instance de classe. Outre les propriétés, vous pouvez utiliser des variables d'instance comme magasin de stockage pour les valeurs stockées dans une propriété.

Swift unifie ces concepts dans une déclaration de propriété unique. Une propriété Swift n'a pas de variable d'instance correspondante et l'accès au magasin de sauvegarde d'une propriété n'est pas direct. Cette approche évite les confusions sur le mode d’accès à la valeur dans différents contextes et simplifie la déclaration de la propriété en une seule déclaration définitive. Toutes les informations sur la propriété, y compris son nom, son type et ses caractéristiques de gestion de la mémoire, sont définies dans un emplacement unique dans le cadre de la définition du type.

Du livre de programmation rapide:

    struct FixedLengthRange {
    var firstValue: Int
    let length: Int
    }

    var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3)
0
Erick Gonzales

Je dis: typealias est encore plus équivalent dans Swift pour @synthesize 

il suffit de regarder ce lien: https://docs.Swift.org/Swift-book/ReferenceManual/Declarations.html

 enter image description here

0
AMH