ImportObjC编译指示
和 importc pragma for C 类似, importobjc 编译指示可用于导入 Objective C 方法。 生成的代码使用Objective C 方法调用语法: [obj method param1: arg]. 除了 header 和 emit 编译指示之外,这允许与Objective C中编写的库的 草率 对接:
- # 和GNUStep对接的反例 ...
- {.passL: "-lobjc".}
- {.emit: """
- #include <objc/Object.h>
- @interface Greeter:Object
- {
- }
- - (void)greet:(long)x y:(long)dummy;
- @end
- #include <stdio.h>
- @implementation Greeter
- - (void)greet:(long)x y:(long)dummy
- {
- printf("Hello, World!\n");
- }
- @end
- #include <stdlib.h>
- """.}
- type
- Id {.importc: "id", header: "<objc/Object.h>", final.} = distinct int
- proc newGreeter: Id {.importobjc: "Greeter new", nodecl.}
- proc greet(self: Id, x, y: int) {.importobjc: "greet", nodecl.}
- proc free(self: Id) {.importobjc: "free", nodecl.}
- var g = newGreeter()
- g.greet(12, 34)
- g.free()
需要告诉编译器生成Objective C(命令 objc )以使其工作。当编译器发出Objective C代码时,定义条件符号 objc 。