Le ObjectiveC.swift
fichier de la bibliothèque standard contient les quelques lignes de code suivantes autour de la ligne 228:
extension NSObject : Equatable, Hashable {
/// ...
open var hashValue: Int {
return hash
}
}
Que open var
signifie dans ce contexte, ou quel est le open
mot - clé en général?
open
etpublic
?")Réponses:
open
est un nouveau niveau d'accès dans Swift 3, introduit avec la mise en œuvre deIl est disponible avec l'instantané Swift 3 à partir du 7 août 2016 et avec Xcode 8 beta 6.
En bref:
open
classe est accessible et sous - classable en dehors du module de définition. Unopen
membre de classe est accessible et remplaçable en dehors du module de définition.public
classe est accessible mais pas sous-classable en dehors du module de définition. Unpublic
membre de classe est accessible mais ne peut pas être remplacé en dehors du module de définition.Il en
open
estpublic
de même pour les versions précédentes de Swift et l'accès àpublic
a été restreint. Ou, comme le dit Chris Lattner dans SE-0177: Permettre de faire la distinction entre accès public et priorité publique :Dans votre exemple,
open var hashValue
est une propriété qui est accessible et peut être remplacée dans desNSObject
sous-classes.Pour plus d'exemples et de détails, consultez SE-0117 .
la source
public
dans Swift 3, c'est commepublic final
dans Swift 2, etopen
est commepublic
?Lire ouvert comme
Je répète ouvert pour l'héritage dans d'autres modules. Ainsi, une classe ouverte est ouverte pour le sous-classement dans d'autres modules qui incluent le module de définition. Les variables ouvertes et les fonctions sont ouvertes pour remplacer dans d'autres modules. C'est le niveau d'accès le moins restrictif. C'est aussi bon que l'accès public accepte que quelque chose qui est public soit fermé pour l'héritage dans d'autres modules.
Depuis Apple Docs :
la source
Open est un niveau d'accès, a été introduit pour imposer des limitations sur l'héritage de classe sur Swift.
Cela signifie que le niveau d'accès ouvert ne peut être appliqué qu'aux classes et aux membres de classe .
En cours
Une classe ouverte peut être sous-classée dans le module dans lequel elle est définie et dans les modules qui importent le module dans lequel la classe est définie.
Membres de la classe
La même chose s'applique aux membres de la classe. Une méthode ouverte peut être remplacée par des sous-classes dans le module dans lequel elle est définie et dans les modules qui importent le module dans lequel la méthode est définie.
LE BESOIN DE CETTE MISE À JOUR
Certaines classes de bibliothèques et d'infrastructures ne sont pas conçues pour être sous-classées et cela peut entraîner un comportement inattendu. La bibliothèque Apple native ne permet pas non plus de remplacer les mêmes méthodes et classes,
Ainsi, après cet ajout, ils appliqueront les niveaux d'accès public et privé en conséquence.
Pour plus de détails, consultez la documentation Apple sur le contrôle d'accès
la source
À l'exception de la sous-classe, an
open class func
est également accessible de n'importe où dans votre projet. Supposons que vous définissez une fonction de classe ouverte dans votre classe Util comme ceciEnsuite, dans n'importe lequel de vos contrôleurs de vue, vous pouvez simplement accéder à cette méthode en appelant
la source
ouvert venez jouer lorsque vous traitez avec plusieurs modules.
la classe ouverte est accessible et sous-classable en dehors du module de définition. Un membre de classe ouvert est accessible et remplaçable en dehors du module de définition.
la source
open est uniquement pour un autre module par exemple: cabosses de cacao, ou test unitaire, on peut hériter ou surcharger
la source