標籤:
開發中常見錯誤和警告總結(十三)
混編總結
Objective-c調用Swift代碼
Objective-c調用Swift代碼兩個步驟
第一步告訴Xcode哪些類需要使用(繼承自NSObject的類自動處理,不需要此步驟),通過關鍵字@objc(className)來標記
1 import UIKit2 @objc(ILWriteBySwift)3 class ILWriteBySwift {4 var name: String!5 class func newInstance() -> ILWriteBySwift {6 return ILWriteBySwift()7 }8 }
第二步引入標頭檔,Xcode標頭檔的命名規則為
1 $(SWIFT_MODULE_NAME)-Swift.h
樣本如下:
#import "ILSwift-Swift.h"
Tips
不清楚SWIFT_MODULE_NAME可通過以下步驟查看
找不到$(SWIFT_MODULE_NAME)-Swift.h
1.遇到此問題可按以下步驟做常規性檢查
2.標頭檔迴圈
在混合編程的項目中,由於兩種語言的同時使用,經常會出現以下需求:在Swift項目中需要使用Objectvie-c寫的A類,而A類又會用到Swift的一些功能,標頭檔的迴圈,導致編譯器不能正確構建$(SWIFT_MODULE_NAME)-Swift.h,遇到此問題時,在.h檔案做如下處理
//刪除以下標頭檔//#import "ILSwift-Swift.h"//通過代碼匯入類@class ILSwiftBean;
在Objevtive-c的.m檔案最上面,添加
#import "ILSwift-Swift.h"
出現Use of undecalared identifier錯誤或者找不到方法,如下:
引起的原因有以下幾種可能:
使用的Swift類不是繼承自NSObject,加入關鍵字即可
SWIFT_MODULE_NAME)-Swift.h沒有即時更新,Xcode->Product->Build
此Swift檔案中使用了Objective-c不支援的類型或者文法,如private
出現部分方法找不到的問題,Xcode無智能提示:
蘋果官方給出的不支援轉換的類型
Generics
Tuples
Enumerations defined in Swift
Structures defined in Swift
Top-level functions defined in Swift
Global variables defined in Swift
Typealiases defined in Swift
Swift-style variadics
Nested types
Curried functions
ios開發——錯誤總結篇&開發中常見錯誤和警告總結(十三)