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)