[Obj-C] 11 GUIアプリ : switch文

[M1 Mac, Big Sur 11.6.5, no Xcode]

ONになっているラジオボタンによって処理を変えるためswitch文を書きました。if文と同様、C言語の書き方になります。

Objective-Cを学び始めてからずっと引っかかっているのが関数の引数です。第2引数以降に引数ラベルを付けるというのが何とも独特です。

さすがにSwiftでは廃止だろうと思うところですが、逆に第1引数にも引数ラベルを付けるようになっています。

まさかと思いつつさらに調べていたら、どうも名前つき引数導入はトレンドだということが分かりました。確かに引数を順番に並べなくてもよくて便利ではありますが、引数ラベルをわざわざ書くのが面倒なので小規模開発の私には不要です。

<該当箇所のみ>

- (IBAction) OnButton1Click:(id)sender {
	onoff_XlsxToList = radioButton_a1.state; 
	onoff_XlsxToCsv = radioButton_a2.state; 
	onoff_ListToXlsx = radioButton_b1.state; 
	onoff_ListToCsv = radioButton_b2.state; 
	onoff_CsvToXlsx = radioButton_c1.state; 
	onoff_CsvToList = radioButton_c2.state;

	if (radioButton_a1.state == 1){
		rbtn_num = 1;
	} else if (radioButton_a2.state == 1){
		rbtn_num = 2;
	} else if (radioButton_b1.state == 1){
		rbtn_num = 3;
	} else if (radioButton_b2.state == 1){
		rbtn_num = 4;
	} else if (radioButton_c1.state == 1){
		rbtn_num = 5;
	} else {
		rbtn_num = 6;
	}

	NSLog(@"%d",rbtn_num);

	NSString *path = [textBox1 stringValue];

	Convert *convert = [[Convert alloc] init];
	NSString *result = [convert ConvertFunc:path number:rbtn_num];
	[textview setString:result];
}
#include <Cocoa/Cocoa.h>
#include "process.h"
#include </Library/Frameworks/Python.framework/Versions/3.10/include/python3.10/Python.h>

@implementation Convert

- (NSString *)ConvertFunc:(NSString *)path number:(int)num {
    switch (num) {
    case 1:{
        Py_Initialize();
        // pyファイルの指定
        PyObject* myModuleString = PyUnicode_FromString((char*)"test");

        // pyファイルのモジュール化
        PyObject* myModule = PyImport_Import(myModuleString);

        // pyファイル内の関数を指定
        PyObject* myFunction = PyObject_GetAttrString(myModule,(char*)"xlsx_to_list");

        // 関数の引数を設定
        PyObject* args = PyTuple_Pack(1,PyUnicode_FromString((char *) [path UTF8String]));

        // 関数を実行し戻り値をPyObjectとして取得
        PyObject* myResult = PyObject_CallObject(myFunction,args);

        // PyObjectをconst char*に変換
        const char* result = PyUnicode_AsUTF8(myResult);
        NSString* result_ns = [NSString stringWithCString: result encoding:NSUTF8StringEncoding];

        NSLog(@"%@",result_ns);

        return result_ns;
        Py_FinalizeEx();
        break;
    }
    case 2:
        return @"case 2";
        break;
    case 3:
        return @"case 3";
        break;
    case 4:
        return @"case 4";
        break;
    case 5:
        return @"case 5";
        break;
    case 6:
        return @"case 6";
        break;
    default:
        return @"default";
        break;
    }
}
@end