5 votes

Comment retourner un CGFloat nul?

Je voudrais retourner nil à tableView:heightForFooterInSection: mais ce n'est pas autorisé. Y a-t-il un moyen de retourner nil en tant que CGFloat?

Pourquoi fais-tu cela?
Je teste comment une tableView se comportera avec un mélange de titres et de vues en tant que sectionFooters. Pour un pied de page, j'ai besoin d'utiliser une vue personnalisée, mais pour un autre pied de page, j'ai 3 ou 4 phrases de texte et j'aime comment le système le stylise et ajuste la taille du pied de page pour s'adapter. Mais dès que j'implémente heightForFooterInSection (qui est requis par viewForFooterInSection), le pied de page avec le titre ne se redimensionne plus automatiquement pour s'adapter au texte donné. J'essaie d'éviter de construire une vue personnalisée pour le texte simple.

7voto

Kevin Ballard Points 88866

Il n'existe pas de nil pour les valeurs primitives. Vous pourriez essayer de retourner 0.0f, mais je ne sais pas comment UITableView y répondra. Il se peut qu'il cache simplement entièrement la vue. Apparemment, si vous souhaitez retourner une vue personnalisée pour un pied de page, vous devez retourner une vue personnalisée pour tous les pieds de page.

3voto

Monolo Points 11263

Comme mentionné par d'autres, il n'y a pas de tel chose qu'un nil pour les flottants.

Cependant, le Département des Hacks Laid vous présente : Le NaN - "NaN" étant une valeur spéciale réservée du modèle de bits flottant représentant "Pas un Nombre".

Aucune idée de ce qu'un UITableView fera d'un NaN, mais dans d'autres situations, cela peut être un moyen de spécifier qu'une variable float n'a pas de valeur.

Si vous ne dites à personne d'où vous tenez l'idée, voici le code :

CGFloat myNan = nanf(NULL);

2voto

Janardan Yri Points 741

Réponse brève : non.

Réponse longue : 'nil' est un pointeur vers rien, utilisé à la place d'un pointeur vers un objet. CGFloat est un type de données scalaire, non une classe Objective-C, et n'est généralement pas utilisé avec des pointeurs (sinon ce serait CGFloat *).

1voto

RubberDuck Points 7337

Je suis en retard pour la fête mais cela peut être utile à quelqu'un.

Comme d'autres l'ont dit, vous ne pouvez pas renvoyer nil à des types primitifs mais vous pouvez faire l'une des deux choses suivantes, pour différencier une valeur non définie d'une valeur définie.

  1. Utilisez NSNotFound

    - (CGFloat)calculateHeight {
       // calculer la hauteur...
    
       if (heightInvalid) return NSNotFound;
       else return validFloatValue;
    
    }

NSNotFound est un nombre énorme défini par Apple et utilisé par eux dans certaines opérations. Vous pouvez donc vérifier cela, comme suit :

if ([self calculateHeight] == NSNotFound) ... 
  1. Utilisez NSNumber

Au lieu de renvoyer un CGFloat, faites en sorte que votre fonction renvoie un NSNumber.

      - (NSNumber *)calculateHeight {
         // calculer la hauteur...

         if (heightInvalid) return nil;
         else return @(validFloatValue);

      }

Ensuite, vous pouvez renvoyer nil.

Lorsque vous recevez la valeur, faites :

NSNumber *myHeightNumber = [self calculateHeight];
if (!myHeightNumber) NSLog(@"la hauteur est invalide... faire quelque chose");
sinon myHeight = [myHeightNumber floatValue];

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X