@_silgen_name 的具体解释

2,597 阅读1分钟

@_silgen_name

  • @_silgen_name的作用就是调用关键字下面的函数时候实际上调用的是关键字包装的函数。

注意特别提醒关键字下面 和 上面说明两个函数要一上一下中间不能有其他函数隔开

实例调用流程

  • 我们新建一个test.c文件,实现一个方法并将它声明在.h文件中
  • test.h
#ifndef test_h
#define test_h

#include <stdio.h>

int lg_add(int a, int b);

#endif /* test_h */
  • test.c
#include "test.h"

int lg_add(int a, int b){
    return a + b;
}

  • 自动创建了桥接文件
#import "test.h" 在桥接文件中 引入头文件

  • main.swift
import Foundation

@_silgen_name("lg_add")

func swift_lg_add(a: Int32, b: Int32) -> Int32

var value = swift_lg_add(a: 20, b: 30)

//var value = lg_add(10,20)
print(value)

在main.swift 运行这个代码 这个时候 运行了 swift_lg_add 函数 其实 实际上调用了 lg_add 函数 这个@_silgen_name 就是这个作用了

  • 简化 文件
    • 1.这个时候 可以更加简单 可以删掉 桥接文件 同时 删除 Build Setting 桥接文件的路径
    • 2.删除test.h 文件
    • 3.修改test.c
    #include <stdio.h>
    
    int lg_add(int a, int b){
    return a + b;
    }
    

  • 修改完成后只需要两个文件就可以了

  • 这个就是解释了 函数写法 注意特别提醒关键字下面 和 上面说明两个函数要一上一下中间不能有其他函数隔开 如果 关键字下面是 别的函数了 这个时候 调用 swift_lg_sum 就调用了 "lg_add" 而不是 swift_lg_add 调用了 特别注意一下