Цикл for для перебора перечисления в Java

Если вы делаете это на Mac, то да, это возможно. На iOS не так много.

На Mac, если вы можете создать приложение CLI в MonoMac, вы можете вызвать свое приложение CLI из своего приложения Objective-C с помощью NSTask. NSTask позволяет легко запускать инструмент командной строки, а затем захватывать его вывод и взаимодействовать с ним. Для этого вы бы сделали что-то вроде:

NSArray *args = [NSArray arrayWithObjects:@"-arg1", @"-arg2", nil];
NSTask *foo = [[NSTask alloc] init];
[foo setLaunchPath:@"/usr/bin/foo"];
[foo setArguments:args];

NSPipe *pipe = [NSPipe pipe];
[foo setStandardOutput:pipe];

NSFileHandle *output = [pipe fileHandleForReading];

[foo launch];

NSData *data = [output readDataToEndOfFile];

NSString *outputStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

NSLog(@"Got stuff: %@", outputStr);

Как правило, так, как вы хотите это сделать, вы включаете приложение CLI внутри вашего пакета приложений. Затем вы можете получить путь к CLI-приложению, используя NSBundles -pathForResource: ofType: method.

iOS не включает API NSTask, так что это невозможно. Я слышал о некоторых людей, использующих MonoTouch, чтобы делать приложения для iOS с использованием C #, но, как вы и предполагали, я думаю, что лучше всего придерживаться Objective-C для большей части вашего приложения, если это возможно. Использование CLI-приложения, как вы описываете, определенно является опцией на Mac и может быть особенно полезно, когда у вас есть код, который уже написан и протестирован и работает, что вы просто хотите «обернуть» графическим интерфейсом Cocoa.

Итак, NSTask - это один из способов сделать это, используя внешний исполняемый файл CLI, завернутый в ваш пакет приложений. С другой стороны, вам может быть интересно, можете ли вы связать свой код C # непосредственно с Objective-C?

Ну, Objective-C является надмножеством C, и, как таковой, он обладает всеми возможностями C. Кроме того, если вы используете Objective-C ++, у него есть все возможности C ++. Итак, ЕСЛИ вы можете получить MonoMac для создания статической библиотеки C или C ++, тогда да, вы могли бы просто связать свою статическую библиотеку с кодом какао Objective-C, и она будет работать. Я не могу сказать вам, как сделать библиотеку из MonoMac, но связать ее - это просто добавить ее в свои связанные библиотеки в настройках сборки в Xcode.

EDIT: я не знаком с C ++ / CLI в качестве языка, и я неверно истолковал значение C ++ / CLI как «C ++ Command Line Interface app». Тем не менее ... методы, которые я описал, по-прежнему применяются как возможные методы для выполнения того, что вы хотите сделать, но НЕ используют интерфейс C ++ / CLI, как вы можете в Windows.

836
задан Peter Mortensen 13 August 2016 в 13:05
поделиться

6 ответов

.values ​​()

Вы можете вызвать метод values ​​() в своем перечислении.

for (Direction dir : Direction.values()) {
  // do what you want
}

Этот метод values ​​() неявно объявлен компилятором . Таким образом, он не указан в Enum doc.

1377
ответ дан 22 November 2019 в 21:11
поделиться

Все константы перечисляемого типа могут быть получены путем вызова неявного общедоступного статического T [] values ​​() метода этого типа:

 for (Direction d : Direction.values()) {
     System.out.println(d);
 }
125
ответ дан 22 November 2019 в 21:11
поделиться

Вы можете сделать это следующим образом:

for (Direction direction : EnumSet.allOf(Direction.class)) {
  // do stuff
}
61
ответ дан 22 November 2019 в 21:11
поделиться

Если вас не волнует порядок, это должно сработать:

Set<Direction> directions = EnumSet.allOf(Direction.class);
for(Direction direction : directions) {
    // do stuff
}
19
ответ дан 22 November 2019 в 21:11
поделиться
    for (Direction  d : Direction.values()) {
       //your code here   
    }
18
ответ дан 22 November 2019 в 21:11
поделиться
for(Direction dir : Direction.values())
{

}
21
ответ дан 22 November 2019 в 21:11
поделиться
Другие вопросы по тегам:

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