初次使用swift稻爬,并且是swift和OC混編,在此蜕依,我記錄下自己的開發(fā)過程桅锄,或許可以幫助到大家琉雳。
1、swift類繼承與OC類
因為項目基于OC開發(fā)友瘤,現(xiàn)在用swift翠肘,而我的控制器需要繼承與OC的類,于是報錯Method does not override any method from its superclass.....
解決思路辫秧,在心間swift的類XXX-Bridging-Header.h文件import父類束倍,即可解決問題。
2盟戏、OC類需要引入swift類報錯 Unexpected ‘@’ in program
1).需要將target-》build Setting->package中Defines Module 設(shè)置為YES绪妹,Product Module Name 設(shè)為xxx,默認為工程名柿究,可不修改
2).在需要調(diào)用的OBJ-C的文件中導(dǎo)入頭文件"XXX-Swift.h"邮旷,XXX為之前設(shè)置 module Name。
3).在OBJ-C的代碼中使用OC語法調(diào)用Swift里面的方法笛求。調(diào)用父類的selector時改用Selector(cancelClickBtn())
4廊移、在OC類中實現(xiàn)swift的代理
swift類中定義代理,以及相應(yīng)的代理傳輸
@objc? //不可獲取探入,筆者也是從其他外文了解到的
public protocol HBNewRecordDetailViewControllerDelegate //切記使用public
字段不然會報錯
{
optional func? sendImageToController(images:NSArray)//代理方法
}
//控制器
class HBNewRecordDetailViewController: HBParentViewController {
weak var delegate: HBNewRecordDetailViewControllerDelegate?//weak字段狡孔,類似OC
override func viewDidLoad() {
?????? super.viewDidLoad()
}
//隨便定義一個button模仿代理回傳
func sureClickBtn(){
self.delegate?.sendImageToController!(self.totalImages!)
}
}
OC中的寫法與以前一樣,注意的一點就是頭文件需要引入#import "xxx-swift.h"文件蜂嗽。xxx為項目名
5苗膝、使用場景,swift繼承了OC的父類植旧,調(diào)用父類時遇到的問題辱揭,在此以封裝的navigationBar做例子。
swift調(diào)用--此處leftSelector和rightSelector是父類的SEL.swift調(diào)用的時候就是這樣病附,HBNewRecordDetailViewController為siwft控制器问窃,cancelClickBtn和sureClickBtn則是需要點擊的處理方法
self.addLeftTitle("取消", leftSelector: #selector(HBNewRecordDetailViewController.cancelClickBtn), rightTitle: "確定",rightSelector: #selector(HBNewRecordDetailViewController.sureClickBtn), theNavTitle: "上傳圖片")
func cancelClickBtn(){
print("點擊了Button")
}
func sureClickBtn(){
print("點擊了Button")
}
6、使用場景完沪,swift引用OC的pch文件域庇,在橋接.h文件加入OC的pch文件即可解決問題。