1. 程式人生 > >OC 與 Swift混編 Swift的閉包傳值到OC中

OC 與 Swift混編 Swift的閉包傳值到OC中

隨著Swift的日益完善,終究會取代OC的地位,就像Kotlin取代Java一樣,不是時間的問題,而是使用者願意不願意被時代淘汰的問題

首先是Swift中定義閉包

一定要注意在Swift的類前面加上@objcMembers,這樣才能在OC中引用;在引用的變數前面加上@objc

@objcMembers class XuanzedituViewController: BaseViewController{
    typealias MapClosure = (Dictionary<String, Any>) -> Void
    @objc var blo:MapClosure?
} //這樣寫就好了

在OC中接著,按block那樣的寫

XuanzedituViewController *xz = [[XuanzedituViewController alloc] init];
xz.blo=^(NSDictionary<NSString *,id> *d){
    //To do something
};
[_c.navigationController pushViewController:xz animated:YES];

就醬