Créer un Setter Seulement en Swift
Quand je créer un setter comme tel:
var masterFrame:CGRect{
set{
_imageView.frame = newValue
_scrollView.frame = newValue
}
}
C'est en me forçant à faire un getter, dont je n'ai pas envie de faire.
Est-il possible de créer un setter dans Swift sans un getter?
- Nope - on dirait que vous seriez mieux avec une méthode.
- Hmm, je suppose que c'est la seule chose que je déteste à propos de swift alors!
- Quand avez-vous l'utilisation de propriétés en écriture seule? Je n'ai jamais eu l'occasion de le faire.
- J'ai une classe où vous pouvez définir c'est masterframe, mais il est alors responsable de la gestion des choses qui vont affecter lui-même (qui ne change jamais la masterframe depuis sa un composite) et l'utilisateur ne doit JAMAIS utiliser le cadre master, sauf pour le régler.
- quel est le problème avec
setMasterFrame(frame : CGRect)
? - C'est pas qu'il y ait quelque chose de mal, mais j'aurais préféré un setter, mais c'est clair que sera la route, je vais aller
- Mais
foo.masterFrame = someFrame
serait mieux, si c'était possible.
Vous devez vous connecter pour publier un commentaire.
Un ensemble que l'immobilier ne sonne pas comme il fait beaucoup de sens. Vous devriez probablement utiliser une méthode à la place.
Ou, il suffit de faire le bonheur du compilateur et ajouter un getter que vous n'appelez jamais:
didSet
fermeture sur l'imageView de l'image que les mises à jour de la scrollView cadre. Ou utiliser la mise en forme automatique avec des contraintes pour les rendre égaux.didSet
pour ce que vous essayez de faire.De la docs:
@available(*, unavailable)
.Bien si je dois vraiment, je voudrais utiliser ce.
Swift compilateur prend en charge certains attributs sur les méthodes de lecture, de sorte que vous pouvez utiliser
@available(*, unavailable)
:Ce sera à transmettre clairement votre intention pour le code utilisateur.
D'avoir un "setter-la seule propriété", vous pouvez juste avoir une simple fonction qui définit la valeur; par exemple, si nous avons une propriété privée appelée
value
, nous pouvons avoir un setter de la méthode appelée,configureWithValue(value:String)
que les mises à jour de la propriété, mais ne permet pas à l'extérieur de l'accès à la propriété:Utilisation didSet à la place:
Sûr. Vous pouvez simplement retourner un néant et de faire le type facultatif:
Alternativement, vous pouvez utiliser
didSet
pour éviter le problème, tous ensemble:nil
, plantage de votre application (ou de vous forcer à ajouter une manutention supplémentaire pour ce cas).Vous pouvez retourner
nil
deget
:J'ai trouvé une exception où j'ai vraiment comme un setter seule variable qui est quand je suis de passage d'une fermeture comme le seul paramètre à une méthode pour le seul but de sauver des il de pour exécution ultérieure.
Je le mettre en œuvre une méthode comme suit:
Je pouvez ensuite appeler la méthode comme suit:
Mais je n'aime pas fermer paretheses après la fermer la parenthèse, car je risque d'avoir beaucoup de lignes dans la fermeture.
Donc, de savoir à propos de Fuite Fermetures je peux juste modifier le code ressemble à ceci:
C'est tout à fait correct et est la syntaxe que Apple montre pour la Fuite des Fermetures. Car il est le seul paramètre et d'être le minimaliste que je suis, je suis tenté de rendre le code encore plus maigre et de le réduire à ceci:
Qui est encore une fois comment Apple montre pour faire de Fuite à la fermeture de l'Exception, cette méthode est généralement utilisée pour une sorte de Prédicat où la fermeture est utilisé pour indiquer la méthode de la façon de faire une sorte ou lorsque la fermeture est utilisé à la fin d'une asynchrones appel de fonction comme l'achèvement de la fermeture. Ce que je veux, c'est à attribuer à la fermeture de ... quelque Chose.
Si je remplace la méthode setColor avec une variable, il ressemble à ceci:
Maintenant, l'appel ressemble à ceci:
Que le signe d'égalité signifie la différence de l'être. Il montre que je suis l'affectation d'une clôture et ne pas exécuter une fonction qui utilise la fermeture, même si elle n'. :') <- besoin d'émoticône ici.
Notes finales: Cela n'a rien à voir avec les fermetures, ça montre juste comment vous pouvez faire un setter seule variable, sauf qu'il est toujours elle renvoie zéro. Il n'est pas destiné à protéger la classe d'avoir à l'utilisateur d'accéder à la variable pour lire comme un vrai poseur seulement. Aussi, pardonnez le tutoriel sur la Fuite des Fermetures et des Singletons.
Je ne peut pas obtenir assez de Voix pour être la bonne réponse, mais pourquoi est-ce la bonne réponse, "Non, vous ne pouvez pas! Vous devez utiliser un appel de méthode!". Je dis, "Ni" pour que, qui a besoin de toute cette syntaxe. Il suffit d'utiliser une variable et ne pas le lire ou si vous le faites, n'ont pas de retourner quoi que ce soit. un peu comme Rudolf Adamkovic réponse, qui a obtenu de 0 Votes.