Desde cet article Je cite la phrase suivante :
Utiliser l'optimisation de tout le module pour déduire la finale sur les déclarations internes. Les déclarations avec accès interne (le défaut si rien n'est déclaré) ne sont visibles que dans le module où elles sont déclarées. Parce que Swift compile normalement les fichiers qui composent un module séparément, le compilateur ne peut pas savoir si une déclaration interne est remplacée dans un autre fichier. Toutefois, si l'option Whole Module est activée, l'ensemble du module est compilé ensemble au niveau de l'étape de compilation. même temps. Ceci permet au compilateur de faire des inférences sur le module dans son ensemble et de déduire la finalité des déclarations avec des contrôles internes. s'il n'y a pas de surcharges visibles. Revenons à l'extrait de code original, en ajoutant cette fois quelques mots-clés publics supplémentaires à ParticleModel.
public class ParticleModel {
var point = ( x: 0.0, y: 0.0 )
var velocity = 100.0
func updatePoint(newPoint: (Double, Double), newVelocity: Double) {
point = newPoint
velocity = newVelocity
}
public func update(newP: (Double, Double), newV: Double) {
updatePoint(newP, newVelocity: newV)
}
}
var p = ParticleModel()
for i in stride(from: 0.0, through: times, by: 1.0) {
p.update((i * sin(i), i), newV:i*1000)
}
Lors de la compilation de cet extrait avec Whole Module Optimization, l'option compilateur peut inférer la finale sur les propriétés point, vélocité, et l'appel de la méthode appel de la méthode updatePoint(). En revanche, on ne peut pas en déduire que update() est final puisque update() a un accès public .
Pourquoi l'OMM ne peut-elle pas envoyer un appel statique à update()
si ParticalModel
n'est pas surchargé dans le module actuel ? Il n'est pas permis de remplacer ParicleModel
dans d'autres modules (puisque son modificateur d'accès est public
pas open
). Je m'attendrais à ce que chaque méthode et propriété de la classe puisse avoir final
déduit parce qu'il n'est pas surchargé dans le module actuel, mais la documentation mentionne explicitement qu'il ne peut pas déduire les éléments suivants final
.