Java | аргумент переменной длины против передачи массива [duplicate]

Если вы хотите отправлять данные от одного к другому viewController, вот путь к нему:

Скажем, у нас есть viewControllers: ViewController и NewViewController.

в ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
{
    IBOutlet UITextField *mytext1,*mytext2,*mytext3,*mytext4;
}

@property (nonatomic,retain) IBOutlet UITextField *mytext1,*mytext2,*mytext3,*mytext4;

-(IBAction)goToNextScreen:(id)sender;

@end

в ViewController.m

#import "ViewController.h"

#import "NewViewController.h"

@implementation ViewController
@synthesize mytext1,mytext2,mytext3,mytext4;

-(IBAction)goToNextScreen:(id)sender
{
    NSArray *arr = [NSArray arrayWithObjects:mytext1.text,mytext2.text,mytext3.text,mytext4.text, nil];


    NewViewController *newVc = [[NewViewController alloc] initWithNibName:@"NewViewController" bundle:nil];

    newVc.arrayList = arr;

    [self.navigationController pushViewController:newVc animated:YES];

}

В NewViewController.h

#import <UIKit/UIKit.h>

@interface NewViewController : UITableViewController
{
    NSArray *arrayList;

    NSString *name,*age,*dob,*mobile;

}

@property(nonatomic, retain)NSArray *arrayList;

@end

В NewViewController.m

#import "NewViewController.h"

#import "ViewController.h"

@implementation NewViewController
@synthesize arrayList;

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{

    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

    // Return the number of rows in the section.
    return [arrayList count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];      
    }
    // Configure the cell...
    cell.textLabel.text = [arrayList objectAtIndex:indexPath.row];
    return cell;


}

@end

Таким образом, мы можем передавать данные с одного диспетчера представлений на другой контроллер представления ...

4
задан Thomas 30 August 2015 в 19:02
поделиться

2 ответа

В Java varargs являются синтаксическим сахаром для создания массива при вызове метода. Например, эти два вызова эквивалентны:

void foo(String... args) { ... }

foo("hello", null, "world", xyz);  // Java 1.5+
foo(new String[]{"hello", null, "world", xyz});  // All versions of Java

Varargs не делает ничего нового (по определению синтаксического сахара), но уменьшает верность и делает некоторые конструкции более приятными для реализации. Например, некоторые из моих любимых применений vararg включают в себя: PrintStream.printf() , String.format() , Method.invoke() .

Другие хорошие применения varargs:

// This one is in the Java standard library
Collections: void addAll(Collection<? super T> c, T... elements);

// Custom examples
int max(int... nums);
void doOperation(File x, String y, SomeEnum options...);

Кроме того, varargs Java доводят язык до четности с поддержкой vararg на языках C, Python, JavaScript и других языках. Поэтому, если часто повторяющийся дизайн (например, max()) лучше всего работает с varargs, Java больше не является нечетным языком, требующим более уродливой реализации.

3
ответ дан Nayuki 1 September 2018 в 06:42
поделиться

Параметры, которые вы говорите, называются varargs .

Некоторые отличия:

  • varargs могут быть не переданы никакие параметры (в основном игнорируются), null или неопределенное количество аргументов, в то время как параметры массива должны передаваться массивом или null
  • varargs должен быть последним параметром вашего метода, тогда как это не имеет значения для параметров массива. Это связано с этим специальным свойством varargs, что, вероятно, является самым существенным различием между двумя вашими вещами:

Три периода после последнего параметра указывают, что окончательный аргумент может передаваться как массив или как последовательность аргументов

Источник

Так, например, этот метод:

public void myMethod(String... args) {}

Может быть вызвано любым из них:

String[] myStrings = {"a", "b", "c"};
myMethod(myStrings);
myMethod("a", "b", "c");

См. этот для хорошего объяснения при использовании varargs.

10
ответ дан Community 1 September 2018 в 06:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: