1.oc 调用swift

/*oc调用swift,  project name为DeomOC:
1.oc工程DemoOC中显式创建一个swift文件,生成DemoOC-Bridging-Header.h
2.#import "DemoOC-Swift.h"
https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html
*/
#import "DemoOC-Swift.h" - (void)viewDidLoad {
[super viewDidLoad];
swifttest *tests = [swifttest new];
NSLog(@"%@", [tests test]);
} // swifttest.swift
// DemoOC
import Foundation class swifttest:NSObject {
func test() -> String {
return "hi "
}
}

2.调用swift framework

碰到问题及解决方法:ios dyld: Library not loaded: @rpath/xxx.framework/xxx 之根本原因

 
oc调用swift framework注意点:
  • class 需继承自NSObject,且public属性才能暴露给oc
  • 函数名转换规则:swift func  foo(para1:...) -> oc  fooWithPara1
  • oc不支持重载,但根据转换规则可以给第一个参数不同的名字,转换的函数名不一样就可以
  • 不支持struct的转换,需用 class
  • enum必须为整型才能转换
  • 函数返回值不支持tuple
 


05-11 20:14