swift調(diào)用OC(底層是通過runtime調(diào)用_objc_msgSend來實現(xiàn)的)
如下圖1-1毁渗、1-2 所示暮蹂,創(chuàng)建person的oc類時(可選擇xcode自動創(chuàng)建橋接文件妓笙,也可手動創(chuàng)建橋接文件并指定路徑)
1贩虾、Xcode會自動幫我們生成Test(項目名)-Bridging-Header.h文件旅薄,并且會在Build Setting中指定橋接文件路徑
2旷赖、在橋接文件中#import需要給swift使用的類
3顺又、接下來在swift類中就可直接使用Person了
let?person = Person()
?person.name="hello"
?person.run()
OC調(diào)用Swift
注意:被oc調(diào)用的swift類需要繼承自NSObject, 比方說如果繼承自NSProxy將消息轉(zhuǎn)發(fā)到真正的target的代理類,就不能被oc調(diào)用
原因:在oc中的類是依賴runtime機制的等孵,而runtime機制需要isa指針稚照,只有繼承NSObject才能獲得isa指針
1、創(chuàng)建swift類并用@objc修飾想要暴露給oc的屬性或方法俯萌,全部暴露可直接用@objcMembers修飾類
2果录、xcode默認生成了用于OC調(diào)用swift的頭文件Test(項目名)-Swift.h,在oc類中#import引用即可