如何将NSString参数传递给函数?

时间:2018-01-20 19:18:31

标签: objective-c

我想初始化一个对象。问题是如何正确传递NSString。

目标代码:

#import "ClaseHoja.h"

@implementation ClaseHoja

@synthesize pares;
@synthesize nombre;

-(id)init
{
    self=[super init];
    if(self){

    }
    return self;
}
-(id)initWithValues:(NSString*)nom par:(int)par
{
    if([super init]){
        pares=par;
        nombre=nom;

    }
    return self;
}

当我调用该函数时,我这样做:

 NSString *nombre="Hello";
 int par=20;
 ClaseHoja *ch = [ClaseHoja alloc] initWithValues:nombre par:numPares]];

2 个答案:

答案 0 :(得分:1)

我建议:

  1. 将遗失的@添加到@"Hello"并修复[] / alloc来电中的init

  2. 如果您正在使用Xcode,我可以让编译器为您合成属性。不需要@synthesize。但是,如果您在某个其他平台上使用独立的LLVM,则可能需要它,但按照惯例,您可以指定具有前一个_的ivar。

    < / LI>
  3. 我将nombre定义为copy属性,并明确复制传递给nombre方法的init值。您不希望冒险将NSMutableString传递给您的方法,并在您不知情的情况下无意中进行变异。

  4. 我建议将initWithValues:par:重命名为initWithNombre:pares:,以消除对正在更新的属性的任何疑问。

  5. 您不需要init没有参数。您可以依赖NSObject提供的那个。

  6. 您通常使用NSInteger而不是int

  7. 在自定义init方法中,您需要确保if ((self = [super init])) { ... }

  8. 因此:

    // ClaseHoja.h
    
    @import Foundation;
    
    @interface ClaseHora: NSObject 
    
    @property (nonatomic, copy) NSString *nombre;
    @property (nonatomic) NSInteger pares;
    
    - (id)initWithNombre:(NSString*)nombre pares:(NSInteger)pares;
    
    @end
    

    // ClaseHoja.m
    
    #import "ClaseHoja.h"
    
    @implementation ClaseHoja
    
    // If you're using modern Objective-C compiler (such as included with Xcode), 
    // you don't need these lines, but if you're using, for example stand-alone 
    // LLVM in Windows, you might have to uncomment the following lines:
    //
    // @synthesize nombre = _nombre;
    // @synthesize pares = _pares;
    
    - (id)initWithNombre:(NSString*)nombre pares:(NSInteger)pares {
        if ((self = [super init])) {
            _pares = pares;
            _nombre = [nombre copy];
        }
        return self;
    }
    
    @end
    

    你可以像这样使用它:

    NSString *nombre = @"Hello";
    NSInteger pares  = 20;
    ClaseHoja *ch = [[ClaseHoja alloc] initWithNombre:nombre pares:pares];
    

答案 1 :(得分:0)

你需要像这样传递。你错过了另一件事@在字符串前签名。

NSString *nombre = @"Hello"; int par=20;
ClaseHoja *ch = [[ClaseHoja alloc]initWithValues:nombre par:par];