ImportObjC 编译指示

类似于 C 语言的importc 编译指示,importobjc 编译指示可以用来导入 Objective C 方法。 生成的代码使用 Objective C 的方法调用语法。 [obj method param1: arg] 。 除了 header 和 emit 编译指示,允许宽松地与用 Objective C 编写的库对接。

  1. # 关于如何与 GNUStep 对接的可怕示例...
  2. {.passl: "-lobjc".}
  3. {.emit: """
  4. #include <objc/Object.h>
  5. @interface Greeter:Object
  6. {
  7. }
  8. - (void)greet:(long)x y:(long)dummy;
  9. @end
  10. #include <stdio.h>
  11. @implementation Greeter
  12. - (void)greet:(long)x y:(long)dummy
  13. {
  14. printf("Hello, World!\n");
  15. }
  16. @end
  17. #include <stdlib.h>
  18. """.}
  19. type
  20. Id {.importc: "id", header: "<objc/Object.h>", final.} = distinct int
  21. proc newGreeter: Id {.importobjc: "Greeter new", nodecl.}
  22. proc greet(self: Id, x, y: int) {.importobjc: "greet", nodecl.}
  23. proc free(self: Id) {.importobjc: "free", nodecl.}
  24. var g = newGreeter()
  25. g.greet(12, 34)
  26. g.free()

这个例子需要告知编译器生成 Objective C (命令 objc ) 才能工作。当编译器输出 Objective C 代码时会定义条件标识符 objc。