OC和Swift混編(一)——OC與Swift相互調用

WWDC推出了SwiftUI、Combine,僅Swift可用~爲了能順利的也吃上SwiftUI,我也打算將本身的項目先從OC慢慢遷移到Swift,因此~一塊兒從混編開始!git

建立Swift的view

正常建立文件,語言選swift github

建立Bridging Header

上一步,點完next,系統會提示以下彈框。點create Bridging Headerswift

oc使用Swift文件

  1. 導入頭文件,在要使用swift的文件的地方都導入此頭文件,或者將此頭文件放入pch裏面,便可使用swift的文件
#import "OCAndSwift-Swift.h" //項目名稱-Swift.h
複製代碼

點擊進去,能夠看到我剛剛建的文件的,以下所示,有初始化的方法,和我暴露在外面的方法~全部swift文件都會在這個文件裏面被「轉化」成OCbash

2) oc裏面調用swift,像調用oc同樣,徹底看不出來。

ZTSwiftView *view = [[ZTSwiftView alloc]init];
    [self.view addSubview:view];
    
    __weak typeof(view) weakView = view;
    //點了確認後執行此block
    view.selectColorBlockSwift = ^(NSString * _Nonnull str) {
        __strong typeof(weakView) strongView = weakView;
        //將string賦值給view的button
        [strongView reloadBtnTitleWithTitle:str];
    };
複製代碼

其中reloadBtnTitleWithTitle方法是swift裏面的方法,swift方法想被oc調用,前面需帶objc,以下ui

@objc public func reloadBtnTitle(title:NSString){
        confirmButton.backgroundColor = .white
        confirmButton.setTitle(title as String, for: .normal)
    }
複製代碼

Swift裏面使用oc的view

  1. 將oc的view放入以前系統建立的bridgeHeader裏面

2) swift裏面使用以下,像是swiftView同樣,正常使用

let ocView = ZTOCView()
        ocView.frame = CGRect(x: 0, y: 0, width: contentView.frame.width, height: contentView.frame.height)
        contentView.addSubview(ocView)
        
        weak var weakSelf = self
        //點ocView中間的view後的block
        ocView.changeColorBlock = {(color : UIColor?) -> Void in
        
            weakSelf?.confirmButton.backgroundColor = color
            weakSelf?.confirmButton.setTitle("肯定", for: .normal)
        }
複製代碼

最後

效果圖以下,是個有些醜的demo~spa

代碼 github.com/zttina/OCAn…
相關文章
相關標籤/搜索