PLplotの最初の例をSwiftに移植してみた。
プリプロセッサでの#defineは,定数には対応しているが別名には対応していないようで,pl()ではなくc_pl()を直接書く必要がある。PLINTはInt32なので,配列の要素数はInt()で型変換する必要がある。コマンドライン引数argc, argvは,SwiftではC_ARGC,C_ARGVかProcess.argumentsで参照できる。Process.argumentsは[String]を,C_ARGVはUnsafePointer<Int8>を返すので,どちらかをUnsafeMutablePointer()でキャストして渡す。
let n: PLINT = 101 let xmin: PLFLT = 0.0; let xmax: PLFLT = 1.0 let ymin: PLFLT = 0.0; let ymax: PLFLT = 100.0 var x = [PLFLT](count: Int(n), repeatedValue: 0.0) var y = [PLFLT](count: Int(n), repeatedValue: 0.0) for (index, value) in enumerate(x) { x[index] = PLFLT(index) / (PLFLT(n) - 1) y[index] = ymax * x[index] * x[index] } var argc: Int32 = Int32(C_ARGC) c_plparseopts(&argc, UnsafeMutablePointer(C_ARGV), PL_PARSE_FULL) c_plinit() c_plenv(xmin, xmax, ymin, ymax, 0, 0) c_pllab("x", "y=100 x#u2#d", "Simple PLplot demo of a 2D line plot") c_plline(n, x, y) c_plend()
SWIFT = /usr/bin/xcrun swiftc CPPFLAGS = -I/usr/include -I/opt/local/include/plplot LDFLAGS = -L/opt/local/lib -lplplotd TARGET = simple OBJS = main.o HDRS = $(TARGET).h $(TARGET) : $(OBJS) $(SWIFT) $(LDFLAGS) $^ -o $@ %.o : %.swift $(SWIFT) $(CPPFLAGS) -c $< -import-objc-header $(HDRS) clean : rm $(TARGET) $(OBJS)