Objective-C Par Défaut De La Valeur De L'Argument
Hé là, question rapide ici. Je suis sûr qu'il y a une réponse simple.
À venir à partir de PHP, je suis habitué à la déclaration d'une fonction avec un argument par défaut valeur comme ceci:
function myFunction ($array, $sort = FALSE) {
}
Je la sorte paramètre n'a pas été rempli, la fonction serait de continuer avec la valeur par défaut false. En Obj-C, est-il une chose pareille?
Je suis en train de travailler à travers les exercices dans mon "Programmation En Objective-C 2.0" livre, et il veut que je le ré-écrire une fraction de la classe de la fonction d'impression par défaut-ly ne pas réduire la fraction, mais si la valeur VRAI pour les réduire est donné, aller de l'avant et de réduire la fraction, puis imprimer. Le chapitre (Ni nulle part dans le livre) donne toute information sur ce.
Merci pour votre aide les gars 😀
OriginalL'auteur Matt Egan | 2009-05-16
Vous devez vous connecter pour publier un commentaire.
Des arguments par défaut n'existent pas en Objective-C, en soi. Ils ne peuvent pas vraiment, parce que l'argument nombre est inextricablement liée à la méthode nom de chaque colon correspond à un argument.
Objective-C programmeurs accomplir un but similaire, bien que, par la création de "commodité" des méthodes qui viens de l'appeler pour un plus "primitive" de la méthode à certains des arguments remplis avec des valeurs par défaut. Par exemple,
-[NSArray indexOfObject:]
pourraient être mises en œuvre comme la version de-[NSArray indexOfObject:inRange:]
avec un argument deNSMakeRange(0, [self count])
pour lainRange:
partie.Dans ce cas, cependant, je ne pense pas que votre livre est d'en parler. Je pense que cela signifie simplement de réduire la fraction si OUI est donnée pour le
reduce:
argument et non pas de la réduire si ce N'est donnée.OriginalL'auteur Chuck
Il y a deux modèles standard pour la réalisation de ce que vous voulez.
(1) ecrire un nombre argument forme d'une méthode, et ensuite fournir moins d'argument commodité versions. Par exemple, considérez les méthodes suivantes sur NSString:
Les trois premiers sont conceptuellement [et probablement concrètement, je n'ai pas vérifier] mis en œuvre comme des appels par le biais de la quatrième version. Qu'est -comparer: appelle -comparer:options:portée:locale: avec les valeurs par défaut pour les trois autres arguments.
(2) L'autre modèle est de mettre en œuvre les nombreuses argument de la version de la méthode et de fournir des valeurs par défaut lorsqu'un argument est NUL/nul ou une valeur qui indique la valeur par défaut est souhaitée. NSData a des méthodes qui sont mises en œuvre avec ce motif. Par exemple:
Si vous passez 0 pour le readOptionsMask argument, la NSData va lire le contenu du fichier à l'aide d'une configuration par défaut définies en interne. Que la configuration par défaut peut changer au fil du temps.
OriginalL'auteur bbum
Cette question est super vieux, mais au cas où quelqu'un le trouve, l'Objective-C version du code PHP (en supposant que c'est à l'intérieur d'une classe) serait probablement quelque chose comme ceci:
J'ai utilisé (id)comme il n'y a pas d'informations de type de données dans votre code PHP. Remplacement de la (id)avec des types de données réels serait sage.
OriginalL'auteur Shadow Radiance
Terrible nécro, mais pour quelqu'un googler ce, Xcode 4.5 prend en charge (via Clang) la surcharge de fonctions en C avec
__attribute__((overloadable))
.Fonctions surchargées sont autorisés à avoir un nombre différent d'arguments, donc si C fonctions sont appropriés pour ce que vous essayez de faire, vous pouvez l'utiliser pour obtenir la valeur par défaut des arguments.
Voici un exemple artificiel d'une .h fichier avec deux fonctions, à la fois appelé
PrintNum
:et dans le .m fichier:
Noter que l'attribut doit être spécifié dans toutes les définitions et déclarations de la fonction.
OriginalL'auteur shilgapira
Pas, par défaut, les arguments sont une caractéristique de C++, pas du C ou Objective-C.
Ce que vous avez à faire en objective-c est le suivant (à l'aide de votre pseudo code ci-dessus):
OriginalL'auteur rein
Vous pouvez facilement obtenir le même effet en utilisant
#define
.La fonction dans votre fichier d'en-tête:
Ajouter un
#define
pour le paramètre de la fonction dans le fichier d'en-tête:Ensuite, vous pouvez utiliser la fonction comme:
Et vous obtiendrez un
NSDate
objet avec la date 2015/01/01.Si la fonction n'est pas
static
, construire une nouvelle fonction comme ceci:Et appel:
OriginalL'auteur Rick Cheung