Pergunta

Existe uma maneira de dar um parâmetro para um método o mesmo nome que uma variável de instância em Objective-C sem esconder essa variável?

Por exemplo,

- (void)doSomething:(id)object
{
    self.object = object;
}

O código acima dá o aviso "Declaração local de couros 'objeto' variável de instância."

A solução óbvia é para citar os argumentos de parâmetro diferente, mas acho que é chato ter que escolher um nome como "anObject" em vez de "objeto".

Foi útil?

Solução

Você pode usar a notação de ponto para propriedades de acesso (como você faz no exemplo), mas variáveis ??de instância têm apenas um caminho de acesso, então a única solução se você quiser o acesso tanto uma variável de instância e uma variável local é dar-lhes diferentes nomes.

Formalmente, isto está relacionado com as restrições sobre alfa conversão em cálculo lambda, especificamente, que a variável ligada deve permanecer ligado e uma variável livre permanecer livre.

Se você não gosta do "um" prefixo para os habitantes locais, você pode usar o "_" convenção de prefixo para as variáveis ??de instância, pois eles também são variáveis ??efetivamente protegidos.

@interface AClass {
    id _object;
}
@property (retain) id object;
@end

@implementation AClass
@synthesize object = _object;

- (void)doSomething:(id)object
{
    [_object befriend:object];
}
...

É claro, "_" lê como "meu", por isso pode ser tão desagradável como "a" / "um" antes parâmetros. A renomeação é a melhor solução como exemplo e locais variáveis ??têm diferentes papéis, e seus nomes devem refletir isso.

Outras dicas

Você pode ser capaz de fazer algo assim self->object = object, mas a convenção Objective-C (derivada do Smalltalk) é parâmetros de prefixo com "a" ou "um" se o parâmetro tem o mesmo nome como uma variável de instância.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top