Objective-C-functie met standaardparameters?

Mogelijke duplicaten:
Optionele argumenten in Objective-C 2.0?
Objective-C standaardargumentwaarde

Ik schrijf een C-functie in Objective-C. Ik wil een standaardwaardevoor mijn laatste parameter.

Ik heb het geprobeerd:

foo(int a, int b, int c = 0);

maar dat is C++.

Ik heb ook geprobeerd:

foo(int a, int b, int c)
{
    ...
}
foo(int a, int b)
{
   foo(a, b, 0);
}

Maar dat is ookC++.

Is er een manier om dit in plaats daarvan in Objective-C te doen?


Antwoord 1, autoriteit 100%

Er zijn geen standaardparameters in ObjC.

U kunt echter 2 methoden maken:

-(void)fooWithA:(int)a b:(int)b c:(int)c {
  ...
}
-(void)fooWithA:(int)a b:(int)b {
  [self fooWithA:a b:b c:0];
}

Voor C: er is niets speciaals toegevoegd aan de C-subset door ObjC te gebruiken. Alles wat niet kan in pure C, kan ook niet worden gedaan door te compileren in ObjC. Dat betekent dat u geen standaardparameters kunt hebben en een functie niet kunt overbelasten. Maak in plaats daarvan 2 functies.


Antwoord 2, autoriteit 6%

Nee, objective-c ondersteunt geen standaardparameters. Zie vergelijkbare vraag


Antwoord 3, autoriteit 2%

Je kunt een C-functie schrijven met een argumentenlijst met variabele lengte. U kunt ‘…’ gebruiken als het gegevenstype voor een van de gedeclareerde parameters van uw functie om aan te geven waar in de parameterlijst de lijst met variabelenargumenten begint. (Hierdoor kunt u een of meer vereiste argumenten voor het begin van de lijst hebben.)

printf() is een voorbeeld van een functie die is geschreven met deze faciliteit (bekend als varargs).

printf(const char *restrict format, ...);

Hier is het eerste argument vereist en kan daarna worden gevolgd door nul of meer aanvullende argumenten.

Als je je functie op deze manier hebt geschreven, zou deze een standaardwaarde kunnen leveren voor de ontbrekende parameter.


Antwoord 4, autoriteit 2%

Voor een C-functie – nee. Voor een methode van Objective C-klasse – ja, u voert gewoon twee methoden uit, waarvan een een parameter kort is en de andere methode aanroept.

Of je kunt je bronnen hernoemen naar .mm en C-functies worden op magische wijze C++.

Other episodes